TCP连接的建立---三次握手

第一次握手:客户端TCP首先给服务器端TCP发送一个特殊的TCP数据段。

该数据段不包含应用层数据,并将头部中的SYN位设置为1,所以该数据段被称为SYN数据段。

另外,客户选择一个初始序列号SEQ,设SEQ=x 并将这个编号放到初始的TCP SYN数据段的序列号字段中。该数据段被封装到一个IP数据报中,并发送给服务器。

第二次握手:一旦装有TCP SYN数据段的IP数据报到达了服务器主机,服务器将从该数据报中提取出TCP SYN数据段,给该连接分配TCP缓冲区和变量,并给客户TCP发送一个允许连接的数据段。

这个允许连接的数据段也不包含任何应用层数据。但是,它的头部中装载着3个重要信息。首先,SYN被设置为1;其次,TCP数据段头部的确认字段被设置为x+1;最后,服务器选择自己的初始顺序号,SEQ=y,并将该值放到TCP数据段头部的

序列号字段中。

第三次握手:在接收到允许连接数据段之后,客户也会给连接分配缓冲区和变量。客户端主机还会给服务器发送另一个数据段,对服务器的允许连接数据段给出确认。

 

TCP协议中连接建立的过程

TCP连接的释放---三(或者四)次握手

第一次握手:由进行数据通信的任意一方提出要求释放连接的请求报文段。
第二次握手:接收端收到此请求后,会发送确认报文段,同时当接收端的所有数据也都已经发送完毕后,接收端会向发送端发送一个带有其自己序号的报文段。
第三次握手:发送端收到接收端的要求释放连接的报文段后,发送反向确认。

TCP连接的释放过程

TCP数据报文

  序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。

序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

  确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

  数据偏移——占 4  bit,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。

  保留字段——占 6 bit,保留为今后使用,但目前应置为 0。

  

  紧急比特 URG —— 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

  确认比特 ACK —— 只有当 ACK= 1 时确认号字段才有效。当 ACK= 0 时,确认号无效。

  推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。

  复位比特 RST (ReSeT) —— 当 RST= 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,通知一下对方。

  同步比特 SYN —— 同步比特 SYN 置为 1,就表示这是一个连接请求或连接接受报文。

  终止比特 FIN (FINal) —— 用来释放一个连接。当FIN= 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

  

  检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据和伪段头(不是TCP里的信息,

但是计算校验和的时候也计算了的内容:IP地址,TCP数据段长度,协议类型)。

  紧急指针字段 —— 占 16 bit(2 字节)。紧急指针指出在本报文段中的紧急数据的位置。

  选项字段 —— 长度可变。TCP 规定了二种选项,最大报文段长度和窗口扩大因子。

最大报文段长度 MSS (Maximum Segment Size) 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”

MSS 是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。

窗口扩大因子,用于扩大接收方窗口。

  填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。

最新文章

  1. 第一个spring、springmvc、mybatis、freemarker项目小知识(一)
  2. 非常棒的Visual Studo调试插件:OzCode
  3. ArcGis 字段计算表达式写法注意事项
  4. 20145227《Java程序设计》第3次实验报告
  5. 2016 - 1 -17 GCD学习总结
  6. Oracle ClusterwarePRCT-1011 : Failed to run "oifcfg".&nb
  7. Oracle内存组件理论篇一
  8. C#磁盘遍历——递归
  9. Qt5+VS2013兼容XP方法
  10. 浅谈position: absolute和position:relative
  11. svn branch 的使用
  12. WKWebView强大的新特性
  13. 用户代码与Spring的交互形式,你有总结过吗?
  14. SQL 快速生成不重复的卡号
  15. 写在vue总结之前(二)
  16. samba服务器配置及window网络磁盘映射
  17. sonarqube 5.6
  18. sap gui 使用方法, sap logon
  19. 移动端-webkit-user-select:none导致input/textarea输入框无法输入
  20. JAVA基础学习之路(十一)引用传递

热门文章

  1. JS 中根据iframe子页面自动iframe高度
  2. Spring Aop之Cglib实现原理详解
  3. 爬虫框架Scrapy之案例二
  4. Nginx+vsftpd搭建图片服务器
  5. Mac Homebrew安装php56 到phpstorm过程问题汇总
  6. HDU5324 cqd分治
  7. Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException
  8. spring boot2.1读取 apollo 配置中心1
  9. saga+.net core 分布式事务处理
  10. linux环境变量 export命令详解