9.网络协议-TCP及UDP协议

1. TCP协议概述

TCP概述

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层(主机到主机,如电脑到服务器的协议,1.类似点到点的协议,仅仅存在一条到达的路径,数据包一般不会丢。2.数据包到达的顺序和发送顺序是相同的)传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。

TCP报文结构

TCP的前20个字节较为重要

 TCP报文结构

[源端口:标识发送方的应用进程。目的端口:标识接收方的应用进程。
[序号:保证数据传输的有序性(按序号1,2,3,4这样往后发)。确认号:对收到的数据进行确认(确认希望下一次从原点发来而收到的序列号。如过主机收到的序列号和下一次打算收到的序列号是一致的,就证明是没有问题的,如果不一致,就证明数据包有丢失)
[Flag字段(8位)
ACK‒确认号标志,置1表示确认号有效,表示收到对端的特定数据
RST‒复位标志,置1表示拒绝错误和非法的数据包,复位错误的连接
SYN‒同步序号标志,置1表示同步序号,用来建立连接
FIN‒结束标志,置1表示连接将被断开,用于拆除连接
[Option字段(可选项)
MSS最大报文段长度(在发第一个SYN包时会包含MSS的信息,告诉对方,自己希望收到的最大报文长度),通过置位,协商能承载的TCP数据的大小

主机到主机层

当两台主机AB建立连接以后,A携带Seq和Ack以及9字节的数据。B应答的时候携带自己的序列号SEQ=1和确认号Ack=10(因为a发来了9个字节,所以希望a下次从10字节开始发)以及自己数据的长度20回发给A。

 

 • 源端口随机分配,目标端口使用知名端口(Well-known port) (比如WEB端口是80);
• 应用客户端使用的源端口号一般为系统中未使用的且大于1023的随机端口;
• 目的端口号为服务端开启的服务所侦听的端口,如HTTP缺省使用80。

由图可看出,B收到的数据,就把对端的源端口转换为自己的目的端口,TCP保证传输的可靠性

2. TCP协议三次握手及四次挥手(来保障可靠性)

 传输机制--TCP三次握手

注意是三次,只有三次才能确定建立连接

传输机制—TCP四次挥手 

 解开连接:需要双方都同意断开连接,才能断开连接

 面向字节流

 流量控制—滑动窗口机制

 

 可靠传输—停止等待协议

 拥塞控制

 

拥塞:在某段时间内,如果我们对网络的需求超过了该资源所能提供的部分,网络性能发生了变化,就出现了拥塞。防止过多的数据而出现过载的情况。

快速传,慢开始,快恢复

 RST标志位

关闭TCP连接的正常方法是四次握手。但是是不是只有四次握手才能关闭TCP连接?
RST 标志位
作用:用于复位因某种原因导致的错误连接,也用来拒绝非法数据和请求。如果接收到RST位时候,通常发生了
某些错误
RST可能被接收方或者中间设备置位
RST置位的原因
‒服务器端口没有打开(listen)
‒服务器响应太慢,用户终止连接
‒网络攻击
‒其他

3. UDP协议概述

UDP协议概述

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System
Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。

UDP报文结构--(适用微信视频)

UDP协议特点 

1.因为UDP是无连接的。在传输数据之前,不需要进行复杂的三次握手来建立连接。
2.在传输数据时,没有协议间通信流量(确认信号),也不需要浪费不必要的处理时间(接收确认信号再发一下)。
3.传输结束后,也不用再用四次握手握手来结束连接。

 TCP和UDP的对比总结

TCP适用场景:
当网络硬件失效或者负担太重时,数据包可能就会产生丢失、重复、延时、乱序的现象。这些都会导致我们的通信不正常的时候。如果让应用程序来担负差错控制的工作,无疑将给程序员带来许多复杂的工作,于是,我们使用独立的通信协议来保证通信的可靠性是非常必要的。
TCP一般用于文件传输(FTP HTTP 对数据准确性要求高,速度可以相对慢),发送或接收邮件
(POP IMAP SMTP 对数据准确性要求高,非紧急应用),远程登录(TELNET SSH 对数据准确性有一定要求,有连接的概念)等等

UDP适用场景:
1.在高效可靠的网络环境中(不需要考虑网络不好导致的丢包、乱序、延时、重复等问题),因为UDP是无连接的服务,不用消耗不必要的网络资源(TCP中的协议间通信)和处理时间(预期确认需要的时间),从而效率要高的多。
2.在
轻权通信中,当需要传输的数据量很小(可以装在一个IP数据包内)时。如果我们使用TCP协议,那么,先建立连接,一共需要发送3个IP数据包,然后数据传输,1个IP数据包,产生一个确认信号的IP包,然后关闭连接,需要传输5个IP数据包。使用TCP协议IP包的利用率为1/10。而使用UDP,只需要发送一个IP数据包。哪怕丢包(服务不成功),也可重新申请服务(重传)。
UDP很适合这种客户机向服务器传送简单服务请求的环境。此类应用层协议包括TFTP , SNMP , DNS ,DHCP等。
3.在
对实时性要求很强的通信中:在诸如实时视频直播等对实时性要求很高的环境中,从而允许一定量的丢包的情况下(直播比赛,前面丢失的包,重传出来已经意义不大了),UDP更适合。(可以根据具体需要通过应用层协议提供可靠性,不用像TCP那么严格。)

猜你喜欢

转载自blog.csdn.net/weixin_49765221/article/details/124176727