📄 tcp笔记.txt
字号:
TCP的半关闭:TCP连接的一端在结束它的发送后还能接收来自另一端数据的能力。
报文段或段(segment):特指由TCP层传递给IP层的信息,即IP层中封装的TCP数据报(可能已被分片)
报文段最大生存时间MSL(Maximum Segment Lifetime):它是任何报文段被丢弃前在网络内的最长时间。
TIME_WAIT状态也称为2MSL等待状态。
当T C P执行一个主动关闭,并发回最后一个A C K,该连接必须在T I M E _ WA I T状态停留的时间为2倍的M S L。这样可让T C P再次发
送最后的A C K以防这个A C K丢失(另一端超时并重发最后的F I N)。这种2 M S L等待的另一个结果是这个T C P连接在2 M S L等待期间,定义这个连接的插口
(客户的I P地址和端口号,服务器的I P地址和端口号)不能再被使用。这个连接只能在2 M S L结束后才能再被使用。
TCP建立连接:3次握手;断开连接:四次握手。
当TCP发出一个segment后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
当T C P收到发自T C P连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒.
T C P将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,T C P将丢弃这个报文段和不确认收到
此报文段(希望发端超时并重发)。
TCP主动发起关闭的一方在发出最后一个ACK后进入2MSL等待状态,以防止对方没有收到这个ACK而等待超时并重发FIN信号。
在T C P首部中有6个标志比特。它们中的多个可同时被设置为1:
U R G 紧急指针( u rgent pointer)有效(见2 0 . 8节)。
A C K 确认序号有效。
P S H 接收方应该尽快将这个报文段交给应用层。
R S T 重建连接。
S Y N 同步序号用来发起一个连接。这个标志和下一个标志将在第1 8章介绍。
F I N 发端完成发送任务。
32位确认序号:也称为应答号(Acknowledgment Number),简写为ACK。
在握手阶段,确认序号将发送方的序号加1作为回答,
在数据传输阶段,确认序号将发送方的序号加发送的数据大小作为回答,表示确实收到这些数据。
TCP通讯的连接是基于插口对的,即客户的IP地址和端口号,服务器的IP地址和端口号。
通讯双方通过两个socket建立连接,每个sokcet都以LocalIP+LocslPort、RemoteIP+RemotePort四个字段的组合作为唯一性检查标志。
因此一个IP地址和端口号可以同时与多个不同的插口建立TCP连接,但每个socket只接收其Peer端(RemoteIP+RemotePort)发给它的数据。
这一点与UDP不同,UDP socket只有LocalIP+LocslPort,不指定RemoteIP+RemotePort,因此它接收任何插口发给它的数据。
例如:
TCP服务器通过一个socket在同一个端口上侦听,接受不同的客户端的连接请求。
每建立一个连接,TCP服务器都要在本地会动态分配一个socket来与peer端建立连接。
TCP客户端的同一端口也同样可以同时与多个不同的服务器建立连接,当然每个连接必然占用一个socket。
在对多个socket绑定同一个本地IP和Port时,对其它SOCKET使用SO_REUSEADDR选项进行设置。
TCP主动关闭时要等待一个2MSL时间后才释放本地socket,在这个时间内不能在本地建立相同的LocalIP+LocslPort、RemoteIP+RemotePort的插口。
在2MSL等待时间内可以通过SO_REUSEADDR在相同端口建立socket,但该socket不能与2MSL的socket具有相同的RemoteIP+RemotePort。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -