博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三次握手建立连接
阅读量:7287 次
发布时间:2019-06-30

本文共 771 字,大约阅读时间需要 2 分钟。

建立连接的步骤例如以下:
  1. client发送一个SYN段表示发起连接请求,该段中包括一个初始序号ISN。
  2. server也发送一个SYN段并包括它自己的初始序号ISN。同一时候设置ACK标志表示对上一个client的SYN的确认。确认序号为client的ISN值加1,该确认序号表示server希望下一次收到的起始序号

  3. client再发送一个ACK以确认server发来的SYN,确认序号为serverISN加1,含义同上。

三次握手完毕,连接建立。

以下以HTTP为例。

在HTTP发送第一个请求之前,须要建立TCP连接。也就是三次握手,这三个TCP数据包不包括不论什么有效数据字节。通过Wireshark来分析三次握手的详细流程。这里有一点须要记住:确认信号应当是上一次已成功收到数据字节序号加1。

第一次握手:
这是client(我的电脑)发出的TCP头。client的port号是59313。server的port号是80,client生成的初始序列号x为0。标志位为SYN表示client请求建立连接。

第二次握手:
这是server返回的应答TCP头。

server也生成一个初始序列号y为0。同一时候将确认序号设为x加1以对client的SYN报文段进行确认,标志位为SYN和ACK。

第三次握手:
client收到server的应答后再次发送一个ACK作为应答。响应序号为y+1以响应server的SYN报文段。由于是第二次发送,所以该ACK的序号为1,但由于ACK不消耗序号。在连接建立之后发送第一个数据时,该序号仍然是1.
注意。Wireshark在这里所显示的序号均为相对序号,相对于某个基准值。该基准值的产生随时间变化。

基准值加上相对序号才是TCP包真正的序号。

參考:
《TCP/IP具体解释》 P174-P176.
你可能感兴趣的文章
设计模式(四)里氏代换原则(LSP)
查看>>
Android 编译常见错误
查看>>
定位到文件目录并选定文件
查看>>
百度腾讯中兴华为全部入局Linux Foundation深度学习基金会
查看>>
ORA-12520
查看>>
java 读取 Properties
查看>>
dubbo-admin密码更改
查看>>
StringBuilder.append长string时出问题。
查看>>
【C语言学习】国嵌18__#error和#line
查看>>
FreeBSD 日记 - 硬件信息显示
查看>>
UDP套接口编程
查看>>
static_cast const_cast reindivter_cast dynamic_cast
查看>>
《CLR Via C#》改变Visual Studio中Output Window输出内容的详细程度
查看>>
php基础学习-- strstr() 函数
查看>>
Java日期格式中的DD和dd的差别
查看>>
c语言加动态库linux
查看>>
Ubuntu下配置SVN
查看>>
android 基本工具类方法及%s妙用
查看>>
dzzoffice的树型结构用户管理设计
查看>>
常见排序算法及其复杂度分析
查看>>