目录
一、UDP协议
二、传输控制协议——TCP
1、TCP协议的可靠传输
(1)可靠传输的工作原理——停止等待协议
(2)流水线传输
2、TCP报文段的首部格式
(1)抓包数据通讯的过程
(2)TCP建立连接后通讯简略图
3、TCP流量控制和拥塞控制
(1)流量控制
(2)拥塞控制
4、TCP传输连接管理
(1)TCP建立连接的三次握手
(2)TCP的连接释放——四次挥手
用户数据报协议UDP图示
如图,应用层报文需要传输,在传输层首先会加上UDP首部、在网络层又会增加IP首部。
UDP的首部格式图示
如图,UDP首部真正的信息只有源端口、目的端口、长度、检验和;但是在UDP的首部为了计算检验和会带入一个伪首部的信息(来自网络层、并不是真正的UDP首部信息)
UDP协议的主要特点
UDP是无连接的,即发送数据之前不需要建立连接。UDP使用尽最大努力的交互,即不保证可靠交互,同时也不使用拥塞控制。UDP是面向报文的。UDP没有拥塞控制,很适合多媒体通信的要求。UDP支持一对一、一对多、多对一和多对多的交互通信。UDP首部开销小,只有8个字节。TCP是面向连接的传输层协议,提供全双工通信(接收和反馈)和可靠交付的服务,同时还具备流量控制和拥塞控制等功能。
TCP协议面向字节流(bit流)、每一条TCP连接只能有两个端点,也就是说TCP连接只能是点对点的(一对一)。
面向字节流传输的过程图示
TCP把连接作为最基本的抽象,每一条TCP连接有两个端点,TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口,TCP连接的端点叫做套接字。
端口号拼接到IP地址即构成了套接字。
停止等待协议(如图):
(a)无差错情况:A给B发送第一个数据包后,会等待B确认,然后再发送第二个数据包。
(b)超时重传:A发送的数据包在传输过程中丢失了,在等待一段时间(通常大于往返时间)后,仍然没有收到B的答复,A再重新发送一次该数据包。
(c)确认丢失:A丢失B的确认后,会重复发送一次数据包,B收到重复数据后丢弃
(d)确认迟到:A没收到B的确认,会重复发送一次数据包,等到收到B迟到的确认后,便不再处理
使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信,这种可靠的传输协议称为自动重传请求ARQ(Automatic Repeat reQuest)
停止等待协议的优点是简单,但缺点是信道利用率太低。如图所示,发数据所用的时间远远要小于等待的时间。
发送方可以连续发送多个分组,不必每发送一个分组就停顿下来等待对方的确认。
由于信道上一直有数据不间断地传送,这种方式可以获得很高的信道利用率。
滑动窗口技术:窗口大小为可以发送的数据量,当窗口内发送的数据收到确认后,该数据便可从滑动窗口中删除,此时窗口向前挪动,加入新的数据再进行发送。
(1)序号:指的是分段的数据包的第一个字节在整个文件中所在的位置。如图,第一个包的序号为1,第二个包的数据为4
(2)确认号:指接收端在收到数据包后,希望收到的下一个数据包在文件中所处的位置的数字。
(3)数据偏移:指的是TCP数据包从多少个字节开始就是正式数据的内容。这是因为TCP首部也具有可变长度,所以TCP首部的长度就是数据的偏移量。
1)域名解析;首先本地服务器会向域名解析服务器询问域名服务器地址
2)建立会话;客户端向服务器发送最大缓存窗口和支持的最大段长度;缓存窗口是告诉服务器,如果服务器发送的数据达到客户端缓存窗口接收的最大值仍然没有收到客户端的确认信息,此时服务器应该停止向客户端再发送数据。
// wireshark抓包过滤条件 ip.src == 47.95.164.112 or ip.dst == 47.95.164.112三次握手抓包示意图
MSS表示最大段的最大值,它是与TCP相关的一个概念,TCP的传输层是分段的,数据链路层期望的最大IP包长是1500字节,那么除去IP包头典型的20字节,再除去TCP包头典型的20字节(或者其他<=60字节的数据),可知,数据链路允许的最大TCP业务长度是1460字节。所以最大段(MSS)是1460字节。
3)连接确认后开始正式通讯
如图,客户端向服务端发送了517字节的数据
服务端在收到客户端的数据后,会发送确认消息,并请求下一个数据,如图,TCP客户端和服务端在进行通信时,始终是在进行着一问一答形式的会话(全双工通信)
接下来,我们再看看其他字段的含义
(4)标记位——URG:如果标记成1,此数据包在发送端缓存中不排队,优先级最高,直接传送。
(5)标记位——PSH:如果标记成1,此数据包在接收端缓存中不排队,优先级最高,直接读取。
(6)标记位——RST:如果标记成1,表示TCP会话出现了严重的错误,必须释放连接。比如建立会话时刷新页面的情况。
(7)标记位——FIN:如果标记成1,表示数据已经传完,需要释放连接。
(8)标记位——ACK:如果标记是1,确认位数据为有效数据,为0,确认位数据为无效数据。
(9)标记位——SYN:为1,表示这是一个需要建立会话请求的数据包。
ACK和SYN标记图示如下:
抓包图示如下:
发起请求数据包
同意建立请求数据包
建立会话后的数据包
(10)窗口:指双方TCP接收缓存容量的大小;——流量控制
客户端和服务器在进行通信时会交换双方的缓存信息,如图:
(11)紧急指针:指明缓存中需要紧急处理的数据的最后一位的位置;只有当URG为1时,紧急指针才会有效。
流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。
原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。
防止过多的数据注入到网络中,这样可以使网络中的路由器或链路过载。如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收(端对端的通信),而拥塞控制是为了降低整个网络的拥塞程度(全局性)。
出现资源拥塞的条件:对资源需求的总和>可用资源
慢开始和拥塞避免——发送方维持拥塞窗口cwnd(congestion window)
发送方控制拥塞窗口的原则是:
只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发出去。只要网络中出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。慢开始算法原理图示:开始发送少量数据,接着发送数据量慢慢增加,直到发送的数据出现丢包或者达到发送窗口的最大值。
发送窗口的上限值:Min[发送窗口,拥塞窗口]慢开始和拥塞避免算法图示:指数增长和线性增长相结合
快重传和快恢复
快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送发及早知道有报文段没有到达接收方。
快恢复指当发送端收到连续三个重复的确认时,就执行"乘法减小"算法,把慢开始门限ssthresh减半,但拥塞窗口cwnd现在不设置为1,而是设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法("加法增大"),使拥塞窗口缓慢地线性增大。
TCP建立连接,通过前两次握手就足以证明网络的畅通信,但是为什么还要第三次握手呢?
场景:当客户端向服务器发送同步数据包后,过一段时间如果没有收到服务器返回的数据包,客户端会再次发送。如果第一次发送的数据包比第二次发送的数据包到达时间晚,那么服务器将收到两次建立会话的请求,同样也就会发送两个确认包,但是其中只有一个确认包能得到客户端的答复,而另外一个就不得不让服务器进行额外的等待,从而不必要的消耗服务器资源。
TCP建立连接客户端和服务端的状态
数据通信结束后,通信双方都可释放连接。
需要有TIME-WAIT状态的原因:当客户端发送的确认关闭数据如果没有到达服务器时,服务器此时会再次发送关闭通知,因此此时仍然需要客服端能够响应关闭通知,如果客户端发送完确认包后直接关闭,此时确认包又在传输的过程中丢失,那么服务器将无法正常关闭连接。
