HTTP/IP协议常见知识点

网络层结构
网络层主流结构有两种分层方式:OSI七层模型 和 TCP/IP 四层模型
OSI 全称 Open System interconnect,意为 开方式系统互联,目前没有成熟产品(太繁琐没人用)
TCP/IP 则是指 传输控制协议/网间协议, 是目前世界上应用最广泛的协议

在这里插入图片描述
TCP/IP协议运作整体把握
假设主机A发送数据给主机B,流程如下:
A应用层数据 -> A传输层 -> A网际层 -> A链路层(网络接口层) -> 根据ip地址和Mac地址找到B -> B链路层 -> B网际层 -> B传输层 -> B
在这里插入图片描述
与此相对应的数据协议封装过程:(应用层 -> 链路层)
在这里插入图片描述
参考博文:http://www.cnblogs.com/xcywt/p/8067521.html

TCP头部
在这里插入图片描述
源端口号和目的端口号:Ip首部的 源IP地址 + 源端口号 和 目的Ip地址 + 目的端口号 可以确定一个唯一的TCP连接
数据序号:表示此报文段中第一个传输数据字节序号
确认序号:仅当确认序号ACK=1时有效。表示下一个期望收到的传输数据字节序号
偏移(tcp头部长度):以4字节为单位,最大是60字节
保留位:留待以后使用,现在为6个0,占6位
6个标记位:
URG 紧急指针
ACK 确认序号指针
PSH 接受方应尽快交付此报文给应用层(发送方要求尽快交付,但交不交还是取决于接受方)
RST 连接重置
SYN 同步序号,用来发起tcp连接
FIN 终止tcp连接
窗口字段:16位,代表的是窗口字节容量,最大 65535字节
校验和:发送方计算和存储,接受方验证。用于校验发送过程中报文是否发生错误,导致无法正常使用
紧急指针:正偏移量,当 URG=1时有效。表示该报文中发送的数据中属于紧急数据的最后一个字节序号(序号+紧急指针)。
选项和填充(必须为4字节的整数倍,不够0填充):最常见的可选报文长度为MSS,如果不设置默认为536
更多细节跳转博客:https://www.cnblogs.com/xcywt/p/8075623.html

TCP的三握四挥
在这里插入图片描述
三握手:
假定客户端为A, 服务端为B

  1. 第一次握手,A向B发信,B收到。B可确认A的发信能力,及B本身的收信能力
  2. 第二次握手,B向A发信,A收到。A可确认B的收发信能力,及A本身的收信能力
  3. 第三次握手,A向B发信,B收到。B可确认A的收信能力
    通过三次握手,AB间互相确认收发信能力,建立相互信任以后就可以进行通信了

接下来开始具体陈述:

先提概念:
	ACK:响应标识,1表示确认响应,连接完整建立后(三握手成功后),所有报文ACK=1
	SYN:连接标识,1表示建立连接,请求连接和接收连接的报文都有SYN=1,其余情况均为0
	FIN:连接关闭标识,1表示关闭连接,请求关闭和接受关闭的报文都有FIN=1,其余情况均为0
	seq:序号,一个随机数X,请求报文会有该字段,响应报文没有
	ack:确认序号,值为 seq + 1,即 X + 1,除了连接请求和连接接受响应报文该字段无效外,其他的报文都有用

三握手过程详述:(三握手过程中发送包,均称为ACK包)

第一次握手:
客户端发送 连接请求报文,SYN=1,序号seq为随机数x。
客户端发送完报文后进入SYN_SEND状态,等待服务器确认。
第二次握手:
服务器收到客户端的连接报文(SYN=1报文),需要对该请求进行确认。
服务端此时要向客户端回应一个报文,
将确认序号ack设置为x + 1, 同时将SYN设置为1,序号seq则为重新产生的随机数y。 
服务端将该确认报文发送给客户端后,便进入SYN_RECV状态,等待客户端进一步确认。
第三次握手:
客户端收到 确认报文 后,将序号ack设置为y+1,向服务器发送 再次确认报文, 
报文发送完毕后,客户端进入 ESTABLISHED状态,服务端接收到该报文后同样进入  ESTABLISHED状态。
完成Tcp的三次握手。

注意:若三次握手的过程中发生了丢包,那么发送方(等待方)会等待一定时间后重发请求报文(默认重发次数为5次),
若重发多次仍未收到应答,发送方会在一段时间后断开连接

四挥手:
(连接断开可以是服务端发起,也可以是客户端发起的)

假设有两个主机A、B建立了tcp连接,现在主机A主动断开连接
第一次挥手:(FIN报文)
主机A,设置序号seq为当前发送序号i(断开前还有最后的一些数据需要发送),
确认序号ack=j(由主机B发送的报文中的sql决定,此处记为j-1),设置FIN=1,
将该报文发送给主机B,并进入FIN_WAIT_1状态,表示没有数据要发给主机2了
第二次挥手:(ACK报文)
由主机B发起,主机B收到主机A的FIN报文后,向主机A响应一个ACK报文,
ack=i+1,表示同意关闭连接,主机A收到后进入FIN_WAIT_2状态
第三次挥手:(FIN报文)
同样由主机B发起,向主机A发送FIN报文,请求关闭连接,主机2进入LAST_ACK状态
第四次挥手:(ACK报文)
主机A收到主机B发送的FIN报文后,向主机B发送ACK报文进行回应,随后主机A进入TIME_WAIT状态,
主机B收到ACK报文后关闭连接。此时主机A需要等待一段时间,确保主机B不再向主机A发送报文后,
主机A再关闭连接。
至此,四挥手结束。

猜你喜欢

转载自blog.csdn.net/weixin_43247186/article/details/87717508