建立TCP连接的三次握手
2015-11-14 21:54
363 查看
请求端(通常称为客户)发送一个 SYN 报文段( SYN 为 1 )指明客户打算连接的服务器的端口,以及初始顺序号( ISN )。
服务器发回包含服务器的初始顺序号( ISN )的 SYN 报文段( SYN 为 1 )作为应答。同时,将确认号设置为客户的 ISN 加 1 以对客户的 SYN 报文段进行确认( ACK 也为 1 )。
客户必须将确认号设置为服务器的 ISN 加 1 以对服务器的 SYN 报文段进行确认( ACK 为 1 ),该报文通知目的主机双方已完成连接建立。
三次握手协议可以完成两个重要功能:它确保连接双方做好传输准备,并使双方统一了初始顺序号。初始顺序号是在握手期间传输顺序号并获得确认:当一端为建立连接而发送它的 SYN 时,它为连接选择一个初始顺序号;每个报文段都包括了顺序号字段和确认号字段,这使得两台机器仅仅使用三个握手报文就能协商好各自的数据流的顺序号。一般来说, ISN 随时间而变化,因此每个连接都将具有不同的 ISN 。
详解:
第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,
主机B收到后确认seq值与ack=1则连接建立成功。
完成三次握手,主机A与主机B开始传送数据。
相关文章推荐
- 确认字符ACK
- SYN及SYN攻击
- Android网络优化4--写一个网络请求模板
- python复杂网络库networkx:基础
- python复杂网络库networkx:基础
- django的HTTPREQUEST对象
- 无线网络方案
- 【TCP/IP协议】四层协议系统
- 网络采集器Demo:Jsoup+Java多线程实现[爬虫](下)
- HttpClient在Android网络通信中的应用
- 10010---JavaWeb基础--HttpServlet
- MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006
- iOS9的网络请求简述
- “App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. T
- Android网络优化3--基本方法
- Tinyhttpd源码剖析(二)
- 简单的网络编程--服务器,客户端呼应
- Tinyhttpd源码剖析(一)
- CentOS7 最小化安装后,安装配置并启动httpd的步骤
- Ubuntu 桌面设置之网络环境的设置