初次学习网络协议记录,如有错误请见谅,欢迎大家补充修改哈。
目录
具体的三次握手:
假设A是客户端,B是服务器
第一次握手 :A->B
(动作1)A向B主动发起建立连接请求(建立连接-TCP请求),A发送完成后。
(首部字段内容)其A_TCP段中的首部
(设备状态)A的状态-CLOSED-关闭态-转变成同步已发送态-SYN-SEND,
(结论)从A的角度:只能证明A向B的方向发送了数据,但是不能证明A发送成功(B有没有接收到)。
(结论)从B的角度:没啥能证明。
A_SYN | A_ACK | A_seq_No | A_ack_No | A_Window | A_option_MSS |
1 | 0 | 0 | 0 | Xx1 | Xx2 |
A主动发起建立 | B在之前并没有发起所以不用回应 | B的ack_No=0
| B的seq_No=0且Len=0 | 默认 | 默认 |
申请建立连接 | 数据段开头位(相对值) | 协调双方计算窗口大小 |
步骤 | 数据量 | 字段 | 绝对值 | 相对值 | 解释 |
第一次 | lens=0 | A-seq_No | s1 | 0 | A第一次连接,还没有任何数据收发,所以seq=0; |
A-ack_No | 0 | 0 | A第一次连接,没有任何数据收发,所以ack=0; |
第二次握手:A<-B
(动作1)B接收到来自A的请求。
(设备状态)B也会从监听态-LISTENED转变成同步已接收态-SYN-RCVD;
=============================================
(动作2)B向A返回响应(建立连接-TCP请求),B发送完成后。
(首部字段内容)其B_TCP段中的首部
(设备状态)B的状态仍为同步已接收态-SYN-RCVD;
=============================================
(结论)从A的角度:没啥能证明。
(结论)从B的角度:能证明B能接收到A的数据,能证明B向A的方向发送了数据,但是不能证明B发送成功(A有没有接收到)。
B_SYN | B_ACK | B_seq_No | B_ack_No | B_Window | B_option_MSS |
1 | 1 | 0 | 1 | XxB1 | XxB2 |
B主动发起建立 | A在之前发起过 对A进行回应 | A的ack_No=0 | A的seq_No=0且Len=0 | 默认 | 默认 |
回应并申请建立连接 | 数据段开头位(相对值) | 协调双方计算窗口大小 |
步骤 | 数据量 | 字段 | 绝对值 | 相对值 | 解释 |
第二次 | lens=0 | B-seq_No | s2 | 0 | 并不是因为上一次A=>B的ack=0导致的(因为当时的ACK=0,所以ack=0无效);而是因为B第一次连接,还没有任何数据收发,所以seq=0; |
B-ack_No | s1+1 | 1 | 因为上一次的A=>B中,A发送了第0位置的数据(虽然数据为空,且长度为0),所以B希望下次A能够发送从"第0+1位置开始的数据"; |
第三次握手:A->B
(动作1)A接收到来自B的请求。
(设备状态)A的状态由同步已发送态-SYN-SEND转变成建立连接态-ESTABLISHED,
=============================================
(动作2)A向B返回响应(响应-TCP请求),B发送完成后。
(首部字段内容)其B_TCP段中的首部:
(设备状态)B的状态仍为同步已接收态-SYN-RCVD;
=============================================
(动作3)B接收到来自A的请求。
(设备状态)B的状态由同步已接收态-SYN-RCVD转变成建立连接态-ESTABLISHED,
=============================================
(结论)从A的角度:证明A能成功向B发送数据,也能成功接收到B的数据
(结论)从B的角度:“假如说B一直能成功接收A的数据”,那么意味着不需要下一次4号B的主动发送,就能证明A确实发送了数据给B(3号执行了),也能证明B确实能发送数据给A。
A_SYN | A_ACK | A_seq_No | A_ack_No |
0 | 1 | 1 | 1 |
不再建立 | B在之前发起过对B进行回应 | B的ack_No=1 | B的seq_No=0且Len=0 |
回应响应 | 数据段开头位 |
步骤 | 数据量 | 字段 | 绝对值 | 相对值 | 解释 |
第三次 | lens=0 | A-seq_No | s1+1 | 1 | 因为上次B=>A的ack=1,所以A开始从第一个位的数据发送给B; |
A-ack_No | s2+1 | 1 | 因为上一次的B=>A中,B发送了第0位置的数据(虽然数据为空,且长度为0),所以A希望下次B能够发送从"第0+1位置开始的数据"; |