zoukankan      html  css  js  c++  java
  • tcp/ip,http协议

    TCP/IP协议简介

    TCP/IP是最广泛支持的通信协议集合 – 包括大量Internet应用中的标准协议 – 支持跨网络架构、跨操作系统平台的通信

    主机与主机之间通信的三个要素

    – IP地址(IP address)

    – 子网掩码(subnet mask)

    – IP路由(IP router) 网络设备 路由器

     IP地址

    唯一标识,网络中一台主机 由32个二进制数组成

    11111111 00000000 11111111 00000000

    点分十进制数,最终由4个十进制数标示

    192.168.1.1 200.1.1.2

    8个二进制1,转成十进制为255

    IP地址的分类

    •用于一般计算机网络

    – A类:1 ~ 127 网+主+主+主

    – B类:128 ~ 191 网+网+主+主

    – C类:192 ~ 223 网+网+网+主

    • 组播及科研专用

    – D类:224 ~ 239 组播

    – E类:240 ~ 254 科研

     IP地址组成

    网络位与主机位两部分来组成

    子网掩码: 作用:区分IP地址网络位与主机位 利用二进制的1表示网络位 利用二进制的0表示主机位 192.168.10.1=11000000.10101000.00001010.00000001 11111111.11111111.11111111.00000000 255.255.255.0

    192.168.10.1 255.255.255.0 = 192.168.10.1/24

    192.168.1.1 与 192.168.2.1 判断 跨区域通信 跨网络的通信

    配置IP地址方式:

    1.手工配置 由管理员手工配置

    2.自动获取IP地址 前提:网络中需要有DHCP服务器

    查看IP地址的命令:ipconfig

    测试通信的命令:ping 对方的IP地址

     ping  192.168.10.2

      一次ping是双向的,有来有回

    两台均关闭windows防火墙,默认拒绝ping操作 控制面板---》windows防火墙---》打开或关闭windows防火墙---》关闭

    网关地址: 路由器(网关设备)上配置 作用:不同网络之间的通信 一个网络连接到另一个网络的关口

    DNS服务地址:将域名解析为IP地址 www.qq.com ------> IP地址

    HTTP协议(超文本传输协议)

    HTTP 协议简介

    http请求由三部分组成,分别是:请求行、消息报头、请求正文

    请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议版本,格式如下:Method Request-URI HTTP-Version CRLF

    http请求方法

    – 常用方法 GET,POST,HEAD

    – 其他方法 OPTIONS,PUT,DELETE,TRACE和CONNECT

    主要特点:

    支持客户/服务器模式

    简单快速:客户向服务器请求服务时,只需传送请求方法和路径;请求方法常用GET、HEAD、POST等,每种方法规定了客户与服务器联系的不同类型;HTTP协议简单,服务器程序规模小,通信速度较快

    灵活:HTTP允许传输任意类型的数据对象;正在传输的数据类型由Content-Type加以标记

    无连接:无连接是指每次连接只处理一个请求;服务器处理完客户请求,并收到客户应答后,即断开连接,节省传输时间

    无状态:无状态是指协议对于事务处理没有记忆能力;应答较快,但传输数据量较大

    HTTP URL:定位网络资源

    http://host[:port][abs_path]

    HTTP请求

    三部分组成:请求行、消息报头、请求正文
    格式:Method Request-URI HTTP-Version CRLF
    Method:请求方法,GET、POST等
    Request-URI:请求的HTTP协议版本
    CRLF:回车换行

    HTTP响应

    由三部分组成:状态行、消息报头、响应正文

    状态行格式:HTTP-Version Status-Code Reason-Phrase CRLF

    HTTP-Version:服务器HTTP协议版本

    Status-Code:服务器返回的响应状态码

    HTTP状态码

    由三位数字组成,首数字定义响应类别
    1xx:指示信息,表示请求已接收,继续处理;
    2xx:成功
    3xx:重定向,要完成请求必须进行更进一步的操作;
    4xx:客户端错误,请求有语法错误或请求无法实现
    5xx:服务器端错误:服务器未能实现合法的请求

    常见状态代码

    200:OK,请求成功;
    400:Bad Request,请求有语法错误,不能被服务器所理解;
    401:Unauthorized,请求未经授权;
    403:Forbidden,服务器收到请求,但是拒绝提供服务;
    404:Not Found,请求资源不存在;
    500:Internet Server Error,服务器发生不可预期的错误;
    503:Server Unavailable,服务器不能处理客户请求

    互联网常见的协议端口号:

    http:超文本传输协议 默认端口: 80

    https:安全的超文本传输协议 默认端口: 443

    ftp:文件传输协议 默认端口: 21

    tftp:简单文件传输协议 默认端口: 69

    DNS:域名解析协议 默认端口: 53

    telnet:远程管理协议 默认端口: 23

    smtp:邮件协议(发邮件) 默认端口: 25

    pop3:邮件协议(收邮件) 默认端口: 110

    snmp:简单的网络管理协议 默认端口: 161

    应用层常用协议:HTTP、SMTP、FTP、ping、telnet、DNS、DHCP等

    三次握手建立过程

    1.客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这是第一次握手;

    2.服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;

    3.服务端发送一个SYN=0,ACK=1的数据包给客户端,告诉它连接已被确认,这就是第三次握手。TCP连接建立,开始通讯.

     

    (1)数据包的关键属性

      SYN :标志位,表示请求建立连接

      Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据

      Ack =0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据

    四次挥手

     概念:所谓四次挥手就是说关闭TCP连接的过程,当断开一个TCP连接时,需要客户端和服务器共发送四个包确认

    第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传输,客户端进入FIN_WAIT_1状态

    第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序 号),服务器进入CLOSE_WAIT状态

    第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态

    第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个AKC给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手

    上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况

    深入讨论:

    1、为什么连接需要三次,关闭的时候需要四次?

            当服务器收到客户端的连接请求后,可以直接发送SYN+ACK报文,其中ACK是确认应答,SYN报文是用来同步的。但  是在关闭连接的时候,当服务器收到FIN的时候,很可能并不会立刻关闭SOCKET,所以只能先回个ACK来应答,只有等服务器把所有报文都发完了才能发送FIN,因此不能一起发送,所有需要四步。

            2、为什么断开链接的时候客户端设置的定时器时间等待要2MSL(两个通信报文的最大时间)?

            当客户端最终告诉服务器断开确认的时候,他不知道自己的发出的指令是否准确的一次性被服务器接收。 

            3、为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

            虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。 

     

  • 相关阅读:
    极简的js点击组图切换效果
    原生js登录创建cookie
    原生js的表单验证
    Inno Setup 检测已安装的.NET Framework 版本
    IntelliJ IDEA中创建并运行scala应用程序
    解决eclipse中maven出现的Failure to transfer XXX.jar的问题
    初识python yield
    解决pycharm无法导入本地包的问题(Unresolved reference 'tutorial')
    理解Python的with as语句
    scrapy写爬虫是出现no module named win32api错误
  • 原文地址:https://www.cnblogs.com/xujint/p/13188022.html
Copyright © 2011-2022 走看看