传输层协议
TCP端口号
- TCP允许一个主机运行多个应用程序,每台主机拥有多个应用端口,每对端口号,源和目的IP组合唯一标识一个对话。
- 端口分为知名端口(0-1023,如FTP、HTTP等)和动态端口(1024-65535,不固定分配给某个任务,只要运行程序提取访问网络申请,系统会分配端口号供程序使用)。
TCP头部
- TCP通常使用IP作为网络层协议,TCP数据段封装在IP数据包内
TCP由Header和Data组成。TCP最多可有60字节的头部,如果没有Options字段,正常长度为20字节。
16位源端口号和16为目标端口号加上源IP和目的IP唯一确定一个TCP连接。
Sequence Number32位序列号,用于标识发送端发出不同的TCP数据段的序号。接收端根据此序列号,可重组数据。
Acknowledge Number:32位确认序列号,标识接收端收到数据段,为序列号加1。
Heder length:4位头部长度,0101表示头部有5个4字节的数目,即20字节。
Window:16位窗口大小表示接收端单次确认而接收到的数据大小,16位对应窗口最大值为65536字节,用于流量控制。
16位校验和,检验TCP报文段,包括TCP头部和数据。该值由发送端计算和记录,接收端验证。
TCP建立连接的过程
TCP面向连接,可靠的全双工传输层协议
如图所示,TCP连接建立是三次握手的过程。
首先主机发送SYN数据段(序列号seq为a),请求建立连接
服务器回复SYN数据段和ACK数据段(seq为b,ack为a+1),确认主机A的SYN报文
主机A发送ACK数据段(seq为a+1,ack为b+1)确定服务器SYN报文。
TCP传输过程
TCP可靠传输体现在确认技术上。
重点在于确认号上。目的设备收到数据段,会向源发送确认报文,源收到后继续发送数据,如此重复。
如图所示,如果服务器收到前M+1499的字节,会以M+1499+1的序列号进行确认。如果服务器A没收到M+1500系列号的字节,服务器会再次以序列号M+1500进行确认,主机A重发数据
TCP流量控制
- TCP滑动窗口技术通过改变窗口大小实现流量控制,如图所示,服务器以ACK 3073响应,调整窗口大小3072,主机A改变其发送速率。
TCP关闭连接
TCP全双工传输数据,TCP三次握手建立的是两个方向的连接,传输完毕后两个方向连接也要都关闭。关闭为四次握手。
主机A想终止连接,发送标识FIN,ACK数据段(序列号为a,确认序列号为b)。
服务器发送ACK数据段(序列号为b,确认序列号为a+1),对于主机A的FIN确认。
服务器A也要终止连接,向主机发送FIN,ACK数据段(序列号为b,确认序列号为a+1)
主机A回复了ACK数据段(序列号为a+1,确认序列号为b+1),对FIN报文的确认。
以上四次交互完成两个方向连接的关闭。
UDP
- UDP面向无连接,传输不可靠。应用在对可靠性要求不高,传输速度和延迟要求较高时,用UDP代替TCP。UDP没有确认技术和滑动窗口机制。
- UDP地址分为头部和数据区域两部分。UDP适合于实时数据传输,语言和视频通话。
- 包含16位源端口号和16位目标端口号
- 16位UDP长度,与TCP不同,这里指的是头部和数据的字节长度。UDP头部长度为8字节,所以最少是8
- 16位UDP校验码,与TCP相同功能,但该字段可有可无。
UDP传输过程
UDP传输数据包是以有序方式发送到网络,每个数据包独立在网络中被发送,也就是说先发送的数据包不一定先到,因为UDP数据包没有序号,需要应用程序提供报文到达确认,排序和流量控制等功能。通常情况下,UDP采用实时传输机制和时间戳来传输语音和视频数据。
UDP传输过程
UDP不提供重传机制,占用资源小,处理效率高,一般处理一些时延敏感流量。如语音视频。
总结
TCP头部的确认标识位有什么作用
TCP报文头中的ACK标志位用于目的端对已收到数据的确认。目的端成功收到序列号为x的字节及之前的所有字节后,会以序列号x+1进行确认。
TCP头部中哪些标识位参与TCP三次握手
TCP的三次握手过程中,要使用SYN和ACK标志位来请求建立连接和确认建立连接。