第四天
对第三天的5条TCP和UDO的不同的讲解
例子引入——扔球游戏
A扔向B,球上写着 我—5 爱—6 你— 7
B接球
1、TCP协议是面向连接的协议,而UDP协议是无连接的协议;
2、TCP协议的传输是可靠的,而UDP协议的传输“尽力而为”;
3、TCP协议可以实现流控,而UDP不行;
4、TCP协议可以实现分段,而UDP不行;
5、TCP传输速度较慢,占用资源较大;UDP传输速度较快,占用资源小;
扔球游戏 —— 面向连接 ——设备在正式传输数据之前,先使用预备的协议建立点到点的连接,之后再传输数据。
TCP头部 —— 可变长头部
首部长度(4位)(根据有无选项增长或减少头部)——指数据前六行——先看首部长度里有无选项长度,若有,首部长度则为数据前六行长度之和,若没有,则为选项前五行之和。
TCP头部最短长度(没有选项)——(16+16+32+32+4+6+6+16+16+16)/8=20
保留(6位)——暂时不用管,6位为0。
URG —— 紧急标记位
ACK —— 确认标记位
PSH —— PSH标记位
RST —— 强制断开标记位
SYN —— 请求标记位
FIN —— 结束标记位
封装图
传输层的校验是伪头部校验
伪头部校验——除了校验本层头部及数据部分内容外, 还会将网络层的部分数据一起进行校验 --- 12字节 --- 32源IP地址,32目标IP地址,8位保留,8位协议号,16位总长度(数据内容加头部) --- 反码相加法 (32+32+8+8+16)/8=12
UDP头部
16位UDP长度 —— 头部加数据的长度 —— 图里三排总长度 —— 因为UDP没有“选项”长度
UDP固定8个字节——(16+16+16+16)/8=8
TCP的三次握手
第一次握手--- A先向B发送SYN请求包(SYN=1)。
第二次握手--- B收到包后,向A回一个ACK确认包(ACK=1),此时,A到B 的会话已建立,要建立B到A的会话,在B发送给A的ACK确认包时,同时发送一个SYN请求包,请求建立B到A的会话。
第三次握手 --- A收到后给B发送ACK确认包,建立了B到A的会话,此时,TCP的双向会话建立好了。
加序号:第一次握手 --- 在A发送给B的第一个SYN包时,发送一个seq序号(seq=x,x为A中的随机一个数)。
第二次握手 --- B收到后发送ACKnumber——ACKno确认序号(ACKno=x+1,表示我已经收到x,请求发送x+1),同时发送B本身的seq序号包(seq=y,y为B中的一个随机数)。
第三次握手 --- A收到后,发送ACKno确认序号(ACKno=y+1,表示我已收到y请求发送y+1),并发送此时A的seq序号包(seq=x+1)。
TCP的四次挥手
第一次挥手 --- A数据已经发完,此时A向B发送FIN请求包(FIN=1)请求结束会话断开连接。
第二次挥手 --- B收到后发送ACK确认包(ACK=1),断开A到B的会话连接。
第三次挥手 --- 此时B到A的会话连接没有断开,所以B向A发送FIN请求包。
第四次挥手 --- A收到后,A发送ACK确认包,此时B到A的会话连接断开。到此,A与B的所有连接断开。
为什么在四次挥手断开会话时,B要给A发送两个数据包?
因为在挥手时牵扯到了数据的传输,而握手的时候没有,所以当A发送FIN包时,表示A的数据已经发完,但是B的数据并没有发完,所以在B的数据发完后才发FIN包,所以是四次挥手。
可不可能是三次挥手?
可能,取决于数据的大小。
TCP协议保证传输可靠性的机制 --- 确认,重传,排序,流控
滑动窗口机制 --- 窗口值win --- seq=1,win=5 --- 表示A向B发送5个数据包,而B只需要确认一次,B发送确认包ACKno=6,win=5(表示我已接收5个数据包,请发送6),下一次,A会向B发送6个数据包seq=1,win=6。要是B还能够处理,则发送确认包,然后A继续增加发送包的数量;如果B不能处理,最多处理5个数据包,则B发送ACK=1,ACKno=6,win=5(表示我只接收了6个数据包,请发送6,A下次从6开始发送,重传)。为了确保发送效率最大。
网络层封装 --- IP地址 --- IP协议
最少20个字节
8位生成时间(TTL)---数据包每经过一次路由器的转发,TTL值将会减一,当一个数据包中的TTL值为0是,路由器将不再转发该数据包,而是直接把他丢弃。
协议号:
TCP --- 6
UDP --- 17
ICMP --- 1
二层上传数据大小:
MTU --- 最大传输单元 --- 1500字节 --- 网络层到应用层总和不超过1500字节
传输层分段的限制:
MSS --- 最大段长度 --- 1460字节 --- 这个值需要在TCP连接的三次握手中前两次SYN包中进行协商,如果双方携带的MSS值不同,则以小的为准。