unp 第二章 传输层 TCP UDP SCTP

本文详细介绍了UDP的无连接特性、不可靠传输以及TCP的连接建立、可靠传输、数据排序和流量控制机制。还提到了TCP的三次握手和四次挥手过程,以及TCP状态转换和TIME_WAIT状态的重要性。此外,讨论了TCP的MSS选项和MTU概念,以避免数据报分片。
摘要由CSDN通过智能技术生成

UDP:

应用进程将消息写入UDP套接字,消息被封装成UDP数据报,该数据报进而封装到一个IP数据报,发送到目的地

1、不保证数据报会到达最终目的地

2、不保证各个数据报的先后顺序跨网络后保持不变

3、不保证数据报只到达一次

4、UDP数据报都有一个长度

5、无连接的服务

6、UDP避免了TCP的连接建立及终止所需的开销

TCP:

1、连接:在客户与服务器之间建立连接,再跨该连接交换数据,最后终止该连接。

2、可靠性:要求对端返回一个确认,如果没有接收到确认,TCP将自动重传并等待更长的时间(TCP含有动态估算往返时间的算法用来确认等待多少时间)。

3、数据排序:对每个字节关联一个序列号,分节传递给IP,接收端如果接收到非顺序到达的分节,便可以根据分节号重排;如果接受到的数据是重复的,将丢弃重复数据。

4、流量控制:任何时刻可以从对端接收的字节数(通告窗口)。

5、全双工

TCP连接建立-三路握手:

1、服务器端调用socket、bind、listen函数,准备好接收外来的连接,称之为被动打开

2、客户端调用connect函数发起主动打开,TCP发送SYN分节,告诉服务器,客户端在连接中发送数据的初始序列号。(第一个分节)

通常SYN分节不携带数据,其IP数据报包含一个IP首部,一个TCP首部及可能有的TCP选项

3、服务器确认(ACK)客户的SYN分节,同时也向客户端发送一个SYN分节,告诉客户端,服务器在连接中发送数据的初始序列号。(第二个分节)

服务器端在单个分节中发送SYN及ACK。

4、客户端确认服务器的SYN,发送ACK。(第三个分节)

TCP连接终止:

1、一端调用close函数,主动关闭,TCP发送FIN分节。(第一个分节)

2、接收到FIN分节的对端执行被动关闭,作为文件描述符发送给应用进程,由TCP确认(发送ACK,第二个分节)

3、执行被动关闭的一端调用close,向主动关闭端发送FIN分节(第三个分节)

4、主动关闭端TCP接收到FIN分节,确认(第四个分节)

在被动关闭端发送FIN分节之前,从被动关闭端向主动关闭端流动数据是可能的,称为半关闭。

序列号:

SYN、FIN分节都携带初始序列号,确认分节(ACK)携带的序列号为SYN、FIN分节序列号+1,即表示发送ACK的TCP端所期待的下一个序列号

TCP状态转换:

1、CLOSED(未打开)

2、SYN_SENT:主动打开时(客户端connect),发送SYN分节,进入SYN_SENT状态。

3、LISTEN:应用进程被动打开。

4、SYN_RCVD:接收到主动端SYN分节,并发送SYN及ACK。

5、ESTABLISHED:数据接收状态,主动打开时,接收到对端SYN分节及 ACK,并发送ACK;被动打开时,接收到ACK。

6、FIN_WAIT1:主动关闭,发送FIN

7、FIN_WAIT2:主动关闭端接收到ACK

8、CLOSING:TCP在FIN_WAIT1状态下,接收到FIN分节,发送ACK,进入CLOSING状态

9、TIME_WAIT:FIN_WAIT1状态下同时接收到FIN分节及ACK,并发送ACK;FIN_WAIT2状态下接收到FIN分节,并发送ACK;CLOSING 状态下接收到ACK。

10、CLOSE_WAIT:ESTABLISHED状态下执行被动关闭,接收到FIN同时发送ACK;

11、LAST_ACK:CLOSE_WAIT状态下发送FIN

12、LAST_ACK接收到最后一个ACK,进入CLOSED;TIME_WAIT状态下2MSL(maximum segment lifetime)超时,进入CLOSED

TIME_WAIT状态:

MSL,最长分节生命期,是任何IP数据报能够在因特网中存活的最长时间。

1、可靠的实现TCP全双工连接的终止:被动关闭TCP端在LAST_ACK状态下,等待接收的那个ACK分节丢失,那么将重发FIN分节,因此,此时客户端必须维护状态以保证对服务器的FIN分节确认,重发最终的ACK分节。

为了保证可靠的终止连接,就要处理在关闭连接时4个分节任何一个丢失的情况,因此TIME_WAIT状态出现在主动关闭TCP端,用来保证最后一个ACK的发送

2、允许老的重复分节在网络中消失:一个连接关闭后又重新建立,新连接为前连接的化身,这时要保证属于ex的老的重复分组全部在网络中消失

根据1和2,TIME_WAIT状态等待2MSL。

套接字:

1、一个套接字标识每个断点的IP地址和端口号

2、一个网络上的每个TCP连接都由一格套接字对唯一标识,一个套接字对定义该连接的两个端点的四元组:本地IP地址,本地TCP端口号,外地IP地址,外地TCP端口号

TCP缓冲区限制:

MTU:最大传输单元,是指一种通信协议在某一层上所能通过的最大数据报大小(常见1500)。两个主机之间的路径中最小的MTU称为路径MTU。超过MTU的数据报,都将执行分片,并在到达最终目的地后重组。同时,对于IPv6路由器,不对其转发的数据报分片(但是路由器本身产生的数据报同样执行分片)

最小重组缓冲区大小:IPv4或IPv6的任何实现都必须保证支持的最小数据报大小,IPv4 576,IPv6 1500

MSS:最大分节大小,用于告诉对端TCP在每个分节中能发送的最大TCP数据量。在建立TCP连接时SYN分节中的MSS选项用于告诉对端其重组缓冲区的实际大小,以避免分片。在以太网中,MSS经常设置为MTC减去IP和TCP首部的固定长度,IPv4 1500-20-20,IPv6-20-40(IP).

TCP在向对端发送数据报时,如果建立连接时收到的对端SYN分节中设置了MSS选项,则将本地MSS设置为对端通告的值。否则,设置为最小重组缓冲区减去TCP和IP首部的值,即IPv4为536,。如果数据报大于对端最小重组缓冲区时,会产生分片。通常,MSS<=MTU-40(IPv4).



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值