TCP和UDP的区别
1,TCP是面向连接的协议,UDP是无连接的协议;
2,TCP协议传输是可靠的,UDP协议传输“尽力而为”;
3,TCP可以进行流控,UDP不行;
4,TCP可以进行分段,UDP不行;
5,TCP传输速度较慢,占用资源较大;UDP传输速度较快,占用资源小。
什么是面向连接:在正式传输数据之前,先通过预备好的协议,建立点到点的连接,之后再传输数据。
TCP报文格式:(背)
TCP --- 可变长头部
seq序号,ack确认序号(长度分别为为4个字节)用于确保TCP的三次握手和四次挥手
首部长度:数据偏移,4位,该字段的值是TCP首部(包括选项)长度除以4。
指针标志符意义:
URG:紧急标记位,置1激活,将紧急数据提到最前,对应紧急指针,紧急指针表示紧急数据到哪一位,即指针之前的都是需要紧急处理的数据(一般置0,用于紧急优先处理的数据传输)
ACK:确认标记位,用于确定回复信息,与确认序号联动,置1时确认序号激活,确认序号与确认标记位不同,确认序号是ack。
PSH:快速通道,置1时不需排队,表示有数据在传输
RST:数据复位信息标识符(用来异常的关闭连接,强制关闭,不需要ack确认)
SYN:请求标记位,请求建立连接时置1 。
FIN:TCP连接的终结标识符,表示结束连接。
伪头部校验 --- 将网络层封装的的12个字节的内容一起进行校验:32位源IP地址,32目标IP地址,8位协议号,8位保留,16位的报文长度,一个TCP数据最小的传输的数据单元为20字节。
UDP:
UDP的报文数据只有源和目标端口号和UDP长度与校验核,所以一个UDP数据的最小单位为8个字节。
TCP和UDP数据传输协议的最大区别在于TCP需要建立可靠的面向连接(三次握手和四次挥手)。
TCP的三次握手(即通过发送三个数据包进行交互):
第一次握手:Client将标志位SYN置为1,随机产生一个值seq=X,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,确认序号激活ack=X+1,因为第一次发送的序号是X,所以确认序号ack=X+1,并随机产生一个值seq=Y,并将该数据包发送给Client以确认连接请求。第三次握手:Client收到确认后,检查ack是否为X+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=Y+1,并将该数据包发送给Server,Server检查ack是否为Y+1,ACK是否为1,如果正确则连接建立成功,完成三次握手,随后Client与Server之间可以开始传输数据。
TCP的四次挥手:
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送。第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送。第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
为什么握手要三次而挥手要四次:客户端在发送挥手请求时,数据已经发送完毕,而服务器端仍然有数据要发送,直到服务端数据发送完毕时,服务端发送最后一个数据包FIN,此时客户端发送ACK信息,服务端才会关闭。而建立连接不需要进行数据传输。
TCP传输可靠性的保障机制:确认,重传,排序,流控(滑动窗口机制)
网络层封装:-IP地址-IP报文格式:(TCP和IP都是可变长头部)
TTL:数据包每经过路由器的一次转发,TTL值将会减一,当一个数据包中的TTL值为0时,路由器将不再转发该数据包,会将其直接丢弃。
8位协议:TCP--6 UDP--17 ICMP--1
ip分片:
MTU --- 最大传输单元 --- 1500字节(一个数据段的最大长度,物理层最大的传输单元)
MSS --- 最大段长度 --- 1460(MSS不包含TCP及IP的协议头长度)
封装:从右到左。
解封装:从左到右。