一、TCP和UDP的区别
TCP全程传输控制协议,UDP名称为用户数据包协议
1. UDP传送之前不需要建立连接,TCP则是面向连接的服务。
2. UDP不可靠,TCP通过多种机制保证传输的可靠性
3. TCP由于可靠传输,具有相当多无法避免的开销,因此效率较UDP低
4. UDP收到后不需要给出任何确认信息
5. TCP是两个端点,UDP可以一对多,一对一,多对多
6. UDP面向报文,而TCP面向字节流
如何理解第六条:UDP仅仅将上层的报文添加首部,一次发送一条;而TCP仅仅把数据看成一连串无结构的字节流,并不知道字节流的意义。接收方必须能将字节流还原为应用层数据。
TCP对应的协议包括SMTP,HTTP和FTP等
UDP包括的协议包括DNS,RIP,DHCP和IGMP等
二、UDP的结构
UDP将应用层报文直接添加首部,形成UDP数据报。首部8个字节,源端口,目的端口,长度和检验和各2个字节(有错就丢弃)。
UDP在计算检验和的时候会添加12个字节的伪首部,并非真正的首部,只是临时添加用于计算检验和。
三、TCP三次握手
虽然TCP是面向字节流,但传送的数据单元仍是报文段。
套接字(Socket) = (IP地址:端口号)
三次握手图:
基本情况如图所示,主机A发送SYN = 1, seq = x
B回复SYN = 1 ACK = 1 seq = y ack = x + 1
A再次回复ACK = 1 seq = x + 1 ack = y + 1
为什么需要三次握手?即为何需要第三次的握手?
防止A发出请求由于网络延迟等原因超时,新的连接已经建立,数据已经发送,该请求才发送到B由于B确认后就可连接,因此对资源造成浪费。
五、四次挥手
主机A先发出关闭申请,只需将SYN修改为FIN即可。
即FIN=1 seq=x
ACK=1 seq=y ack=x+1
FIN=1 ACK=1 seq=z ack=x+1
ACK=1 seq=x+1 ack=z+1
为什么关闭连接需要比建立连接多一次?
留下关闭的时间