目录
TCP/UDP
TCP和UDP的区别:
TCP和UDP的使用场景:
补充封装和解封装:
传输层:
TCP头部(可变长)
第一行:源端口号和目标端口号。
第二行:用以标识数据段的序列号。
第三行:回应的数据包中用以请求想要的数据段的序列号。
第四行:首部长度表示整个TCP头部一共多长。(与选项段有关,若选项段为空,表示TCP头部的最短长度,为20个字节。)
补充:1个字节=8个比特位
保留:暂时没有用处。
6个标记位:每一个都代表一位二进制,为0表示未激活,为一表示激活。
URG:置1时紧急指针将会激活,表示这个数据段里包含有需要紧急处理的数据,用来处理避免TCP数据流中断。
ACK:置1时表示数据段中的确认序列号激活,置0的时候表示数据段不包含确认信息,确认号被忽略。(起确认信息的作用。)
PSH:PUSH标志的数据,置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。(优先处理该数据段,不需要等到数据段组成数据包才进行传送。)
RST:用于复位因某种原因引起出现的错误连接,也用来拒绝非法数据和请求。该标记为置1时,强制断开与对方的连接。
SYN:请求标记位,置1时表示该数据包表示请求与对方建立连接,形成会话。(对方回复ACK置1的数据包就表示同意连接。)
FIN:结束标记位,置1时表示请求与对方断开连接。(对方回复ACK置1的数据包就表示同意断开。)
补充:TCP协议可将大数据包分成若干小的数据段,进行分段传输。
窗口大小:
紧急指针:指向需要紧急处理的数据,URG置1时激活。
第六行:选项表示可选项。
第七行:数据表示上一层传输下来的数据。
最短也是20个字节。
TCP建立连接的过程
TCP的三次握手
A与B建立连接
1、A先向B发送SYN置1的数据包(此时该数据包的序列号随机,设为X;确认序列号未激活。),表示请求建立A--->B的连接。
2、B向A回复ACK置1的数据包(确认序号为X+1,表示请求下一个数据包;序列号随机,设为Y。)表示同意建立,因为是建立双向会话,所以B回复的数据包中的SYN置1,表示B也请求建立B--->A的连接。
3、A向B回复ACK置1 的数据包(确认系列号为Y+1,表示请求下一个数据包;序列号为X+1),表示同意建立。
双向会话建立完成
TCP断开连接的过程
TCP的四次挥手
A与B断开连接
1、A先向B发送FIN置1的数据包,表示想与B断开连接。
2、B向A回复ACK置1的数据包,表示同意断开A--->B的连接。但此时B对A的数据传输可能没有结束,所以B--->A的连接没有断开。
3、B向A发送FIN置1的数据包,表示想与A断开连接。
4、A向B回复ACK置1的数据包,表示同意断开连接。
断开连接完成
补充:断开连接的过程因为数据传输完成的时间可能不同,所以标准的断开过程是4次,但也可能是3次。
与传输数据的数据包不同,建立连接和断开连接的数据包只是功能型的数据包,即便没有双向会话也能进行传输。
TCP序列号
数据传输的过程中序列号其实是指向以字节为单位的数据。(按字节衡量)
例如:将一个1000个字节的数据包划分成三个数据段发送,第一个300字节,第二个400字节,第三个300字节。假如A先向B发送第一个数据段,序列号为X。B收到后回复A的确认数据包中的确认序列号就应该为X+300,表示B请求A发送序列号为X+300开始的下一个数据段。以此类推,A发送完第二个数据段,B回复的确认数据包中的确认序列号就应该为X+700。因为A的第三个数据段发完后就没有数据需要发送,所以A在发送第三个数据段时可以将FIN标志置1,以结束会话。
TCP的流控
在数据传输过程中,可以一次性发送多个数据包/段来实现流量控制。这一功能需要通过窗口大小来实现。
例如:A先一次性向B发送3个数据包,第一个数据包的序列号设为1,每个数据包假设只有一个字节,并把窗口值置为3。B回复A一个确认序号为4,窗口值为3的确认数据包。此时A会认为B可以同时处理3个数据包,为提高传输效率,A会加大窗口值。假如提升到5,则一次性发送5个数据包,此时B回复A一个确认序列号为9,窗口值为5的确认数据包。此时A继续向上试探,假如将窗口值提升到7,则一次性发送7个数据包。B如果此时只能处理5个数据包,B将会发送一个确认序列号为15,窗口值为5的确认数据包,表示B现在只能处理5个数据包并请求序列号为15开始的数据包。A再次发送时就会从序列号为15的数据包开始发,且只会发送5个数据包。此后A还会不断的向上试探,以提升传输效率。(B可能被其它的数据拉低了处理能力。)
IP协议---网络层
第一行:
版本:表示使用的IP协议版本。(IPV4 - 4或者IPV6 - 6)
首部长度:表示IP头部长度。(可变长,与TCP类似,与选项有关。)
服务类型:标记特殊处理。
总长度:表示头部加数据的长度。(整个数据包的长度)
第二行:
标识:表示同一个数据包分片后的数据片的“身份证”。(即同一个数据包分片后产生的数据片的标识一定相同。)
标志:有三位,第一位保留(无意义),第二位置0表示进行了分片,置1表示没有进行分片。 第三位置0表示这个数据片是最后一片,置1表示后面还有分片。
片偏移: 此分片在原始数据的偏移,用于分片重组,因为13位,所以支持的最大字节为8192。
第三行:
首部检验和:确保数据完整性,只校验首部。
第四行:源IP地址。
第五行:目标IP地址。
第六行:选项表示可选项。
第七行:数据表示上一层传输下来的数据。
IP的分片和TCP的分段
TCP的分段:TCP协议可将大数据包分成若干小的数据段,进行分段传输。
IP的分片:将大的数据包分成若干小的数据片进行传输。
通过TCP协议传输的数据通常不会在网络层进行分片,因为在传输层就已经进行了分段。所以通过网络层进行分片的一般是通过UDP协议传输的数据。