传输层
作用: 在通信双方节点上进行处理
在传输层负责建立点对点的连接:通过解析数据报文TCP协议首部的目标端口号(可以判断是哪种应用程序如80端口是http协议),将数据包发送往端口中,由特定的应用服务接收信息。
端口号: 用于区分同一主机的不同的应用程序或服务。
端口号确定方法:
1、标准规定:如HTTP、TELNET、FTP都有相对的端口号,这是内部设定的,分布在1024~49151之间
2、时序(动态分配法):操作系统分配
判断是否是同一通信:
TCP/UDP通过5个信息判断是否是同一通信:
1、源IP地址、
2、目标IP地址
3、协议号
4、源端口号
6、目标端口号
TCP协议
作用: 面向有连接协议,点对点传输层数据协议,实现IP数据报的可靠性传输。
工作原理: 通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
知识点:
序列号(Seq)、确认应答(ACK):
1、发送方发送数据包时会对数据包编号即为序列号。
2、接收端在接收到数据包时会发送确认应答号,并发送下一个要接收的序列号(即接收到的序列号+1)。
3、发送端等待一段时间后如果接收端没有回传应答,则重传数据(超时重传),或者接收端发送的ACK符合。
4、发送端没有收到应答有可能是接收端应答丢失或在应答超时时间后才到达,因此可能接收端会接收到重复的数据包,这时接收端需要根据序列号确定是否接收。
重发超时时间的确定:
1、TCP在每次发送数据包时都会计算往返时间以及偏差(即RTT时间抖动),并设定为稍大于其值总和的时间。
2、在重发次数过多情况下仍无应答后会直接断开TCP通信。
连接管理:
1、三次握手建立连接
2、四次挥手断开连接
LISTEN - 侦听来自远方TCP端口的连接请求;
SYN-SENT -在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求;
CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
CLOSING -等待远程TCP对连接中断的确认;
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态;
以段为单位发送数据包:
1、在三次握手时确定通信双方接口的最小接收量MSS(多个数据包的大小单位)大小
2、每次发送时不需要重复分片发送。
滑动窗口和快重发:
1、以MSS为窗口大小,每次发送MSS大小数据,不需要等待应答就可以发送下一个MSS大小的数据量。
2、如果中途发送到接收端的数据段丢失了,接收端的确认应答序列号不会更新,这时接收端每收到一个数据段都会确认应答丢失的数据段的序列号(即使收到不正确的数据段序号放到缓存区中),当发送端接收到三次同样的应答就会重发之前的数据端。
3、如果中途的数据段没有丢失,但是接收端的确认应答丢失了,但下次接收端的确认应答序列号也会更新,因此不会触发重传。
流量控制:
1、发送端也会根据接收端可接收的数据量大小决定发送数据的大小,在TCP首部中有一字段用来通知窗口的大小
2、接收端的缓存区一旦数据溢出,也会将窗口值更新为更小的值通知发送端(甚至暂停接收数据)
3、发送端每隔一段时间会发送一个窗口探测的数据段确定窗口的大小。
拥塞控制: 通过滑动窗口可以连续的发送数据,但在网络刚建立时,发送大数据包可能会使网络堵塞。
慢启动: 发送端起始会设置一个拥塞窗口为1,然后取拥塞窗口和接收端窗口的最小值发送数据量(更小),每次包往返时,拥塞窗口会以1、2、4指数扩大,但扩大到一定阈值,只能以下面的比例扩大[(1个数据段字节数/拥塞窗口字节)*1个数段的字节数]。
TCP网络吞吐量变化(数据段大小的变化):TCP一开始不设置阈值,而在超时重发时设定阈值为当时拥塞窗口的一半(重复应答重传则设置阈值为当前窗口的一半,窗口大小为阈值+3数据段),因此,在每次超时或重复应答时阈值都会降低即可发送的数据段(吞吐量减小),然后又不断增大,所谓的TCP吞吐就像在逐步占领网络带宽。