前言
曾经学习过一段时间的数通方向的课程,后来又转向Linux和云计算。学习过的知识都忘得差不多了。今天翻起来之前记过的笔记,看到有关于TCP传输方面的记录,就又整理了一下。
去掉了关于底层TCP头部包的分析。
一、主机和服务器在进行交互信息之前的动作
1、TCP建立连接的过程(三次握手)--->成功标志着双方都遵守TCP协议
PC与服务器通过三次握手建立可靠连接(双方都遵守这个协议)
Send SYN:发送请求消息 seq:序列号(为传输的消息做一个编号)
ACK:确认消息 ack:确认序列号
- 主机A发送了一个标识SYN的数据段,表示期望与服务器A建立连接,数据段的序列号(seq)为a。
- 服务器A向主机A回复标识为ACK的数据段确认序列号(ack+1)为主机A的序列号加1(a+1),一次作为对主机A的SYN报文的确认;同时向主机A发送一个SYN的数据段,数据段的序列号为b。
- 主机A发送了一个标识为ACK的数据段,此数据段的序列号(seq)为a+1(和第一次序列号+1),确认序列号为服务器A的序列号加1(b+1),以此作为对服务器A的SYN报文段的确认。
基于上一次消息的序列号向对方进行确认。
二、主机和服务器在进行交互信息时的动作
2、TCP流量控制--协商窗口大小--->窗口字段1
只会对超出流量进行控制,不超出就不控制。
主机A向服务器A发送消息,主机A不知道服务器A的窗口大小,所以先发四段消息,服务器A只能接受三段消息,所以服务器A发送以ACK 3073响应(ACK+1),窗口大小调整为3072,表明服务器的缓存区只能处理3072个字节的数据段。于是主机A改变其发送速率,发送窗口大小为3072的数据段。
3、TCP传输过程(丢包重传机制)
如三个数据段第一个丢包,则三数据段重新传输。三个数据段丢了最后一个数据段,则只传最后一个数据段。三个数据段丢了中间那个数据段,则传最后两个数据段。
三、主机和服务器在进行交互信息之后的动作
4、TCP关闭连接(四次分手)
FIN:结束消息
- 主机A想终止连接,于是发送一个标识了FIN,ACK的数据段,序列号为a,确认序列号为b。
- 服务器A回应一个标识了ACK的数据段,序列号为b,确认序号为a+1,作为对主机A的FIN报文的确认。(主机)---释放主机完成
- 服务器A想终止连接,于是向主机A发送一个标识了FIN,ACK的数据段,序列号为b,确认序列号为a+1。
- 主机A回应一个标识了ACK的数据段,序列号为a+1,确认序号为b+1,作为对服务器A的FIN报文的确认。
Comments | NOTHING