传输层详解-TCP建立断开连接过程、TCP和UDP封装报文格式和应用、TCP中的四种计时器)
一、传输层的概念
网络层提供点到点的连接,传输层提供端到端的连接。在网络通讯的过程中,依靠网络层达到发现对端的目的,在发现对端之后,我们需要精准的找到想要访问的进程/服务/应用,传输层提供的端口号码的概念满足了找到应用/进程这一目的。
二、传输层协议
1、TCP(transmission control protocol)传输控制协议
属于面向连接的协议,在数据发送前,需要与会双方先建立连接,TCP发送的数据保证可靠性,但是传输效率低
2、UDP(user datagram protocol)用户数据报协议
在数据发送前,不需要与会双方建立连接,UDP发送的数据不保证可靠性,但传输效率高
三、TCP报文头部格式
TCP头部默认大小:20Byte
1、源端口号码
2、目标端口号码
3、发送数据时所携带的序列号
4、接收端接收到数据包后给予的响应报文的确认号
5、4bit的首部长度子段:20Byte
6、6bit的保留字段
7、URG位(紧急指针有效位):若想要将某段数据立即发送,则可将该段数据的最后一位的URG位置为1,表明从该段数据的第一个包至当前URG位置为1的包全部都是紧急指针位,URG=1的数据不进入缓存区,直接被用户进程所处理
8、ACK位(确认位):表明收到对端数据后的确认报文
9、PSH位:若某段数据的PSH位置为1,则表明该段数据进入缓存区后,不用等待缓存区满载在提交给用户进程处理,而是直接将欠载的缓存数据提交给用户进程处理
10、RST位:表明请求与对端重新建立连接
11、SYN位:表明请求与对方建立连接
12、FIN位:表明请求与对方断开连接
13、16位的滑动窗口:用来实现流量控制
14、首部校验和字段
四、TCP建立、断开连接过程
三次握手
1、clientA 主动向clientB 发送 SYN=1 的请求连接
2、clientB向clientA发送SYN=1的请求建立连接数据包,同时为了确认接收到了clientA的SYN,clientB将ACK=1,表明确认收到了clientA的SYN
3、Client A 给clientB回应的ACK=1的确认报文
TCP断开连接
四次断开
1、client A主动向clientB发送FIN=1的请求断开连接
2、ClientB首先向clientA进行ACK=1的确认响应
3、clientB也向clientA发送FIN=1的请求断开连接
4、clientA向clientB回复的ACK=1的响应报文
五、 TCP滑动窗口机制
1、TCP使用滑动窗口的概念来完成流量控制机制
方式:与会双方在TCP三次握手完成之后,首先确定接收方的缓冲区大小,之后发送方发送与接收方缓冲区大小相等的数据给对端,接收方在缓冲区满载后开始逐个处理数据包,接收方的缓冲区会被逐渐放空,此时接收方使用滑动窗口的概念来动态的通知发送方调整数据发送的大小。
2、TCP使用滑动窗口的概念来完成拥塞管理机制
方式:在与会双方发送数据前先建立TCP三次握手,与会双方协商今后一次性传递的窗口大小,在协商成功后,发送方发送数据,而后发送方没有收到全部的ACK响应报文,但接收方依旧称自身可接收之前协商好的窗口大小数据,此时,发送方可以确认,中间的链路出现拥塞,然后发送方自动调整一次性数据的发送大小。
六、TCP中四种计时器
1、重传计时器:目的是为了控制丢失的数据段(默认是60s)。为了保证数据传送的可靠性,TCP要求接收方每收到一个数据包,就必须给发送方发送一个ACK的确认报文;若在重传计时器到时前,发送方依旧没有接收到接收方传送过来的ACK,则发送方将会重新传送上一个报文,直到发送方接收到了确认报文为止。
2、 坚持计时器:目的是为了防止零窗口锁死(默认是60s)。发送方向接收方传递2个窗口的数据,接收方发送ACK表明缓冲区已满,此时发送发将会开启一个坚持计时器,在坚持计时器到时前,若发送方接收到了接收方传送的后续ACK报文,则发送方复位计时器,继续传送后续报文;若在坚持计时器到时前,发送方没有接收到接收方所发送的后续ACK报文,则此时发送方将主动向接收方发送探测报文,询问是否可以接收后续报文。
3、保活计时器:目的是为了防止TCP过长的空连接(默认2小时)。若某客户端与服务器建立了TCP三次握手后,在2小时之内没有发起任何的通讯连接请求,则此时服务器将会主动的向客户端发送10个间隔75s的探测数据段,若10个探测数据段过程结束后,客户端依旧没有响应,则服务器可主动中断连接,防止一个过长的TCP连接持续占用网络及服务器资源。
4、时间等待计时器:默认时间是30s-2min,取决于不同的应用。在TCP四次断开时,若主机A在发送完最后一个ACK后立即断开连接,而此时的ACK报文主机B并没有收到,则此时会出现:主机A已经断开连接,而主机B依旧保持连接的问题。解决方案:在主机A发送完最后一个ACK后,不立即断开连接,而是等待一个时间等待计时器时间,等到主机B已经断开连接后,主机A在断开连接,保证与会双方均成功的结束通讯。
七、TCP的应用
八、UDP的封装格式和应用
九、TCP/IP协议栈