1、TCP三路握手连接

TCP通过三路握手来建立连接,建立一个TCP连接时,需要客户端和服务器端总共发送三个包以确认来凝结的建立,在socket编程中,这一过程由客户端执行connect来触发,
TCP是面向字节流的,通过TCP传送的字节流中每个字节都是按顺序编号,Sequence Number字段值指的是本报文段数据的第一个字节的序号,Acknowledgement Number 是期望收到对方下一个报文段的第一个数据字节的序号。

  • offset:占4位,TCP报文段报头长度包括固定的20字节和TCP option字段;
  • reserved:占6位,保留;
  • Window:占2个字节。窗口值是指发送者自己的接收窗口大小,因为接收缓存的空间有限。
  • CheckSum:占2个字节。和UDP报文一样,有一个检验和,用于检查报文是否在传输过程中出差错。
  • Urgent Pointer:占2字节。当URG=1时才有效,指出本报文段紧急数据的字节数。
  • TCP flags 的C、E、U、A、P、R、S字段代表该报文的性质:
    C(CWR)、E(ECN):用来支持ECN(显示阻塞通告);
    U(URG):URG=1时,它告诉系统此报文中有紧急数据,应优先传送;
    A(ACK):仅当ACK=1时确认号字段才有效,建立TCP连接后,所有报文段都必须把ACK字段设置为1;
    P(PUSH):若TCP连接的一段希望另一端立即响应,PSH开始催促对方,不再等到缓存区填满才发送;
    R(RESET):若 TCP 连接出现严重差错,RST 置为 1,断开 TCP 连接,再重新建立连接。
    S(SYN):用于建立和释放连接,当SYN=1时,表示建立连接。
    F(FIN):用于释放连接,当 FIN=1,表明发送方已经发送完毕,要求释放TCP 连接。

1. 第一次握手:客户端向服务器端发送SYN报文,并设置发送序号为X.等待服务器确认;
2. 第二次握手:服务器收到客户端发送的SYN报文后向客户端发送SYN+ACK报文,并设置发送序号seq为Y;
3. 第三次握手:客户端收到后再次发送SYN报文,然后设置发送序号为Z,在确认序号为Y+1并且客户端和服务器端就开始传输数据.

TCP三路握手连接的意义在于通知对方自己的初始化序号,也就是seq,这是作为之后数据传输的依据,以保证TCP传输中不会出现错误混乱。TCP三路握手的必要条件:

  • 服务器必须准备好接受外来的连接,通常调用socket()、bind()和listen()三个函数来完成,被称为被动打开;
  • 客户端通过调用connect()函数主动打开,也就是客户端发送一个SYN告诉服务器端自己在连接中发送的的初始化序列号SYN分节不携带数据;
  • 服务器端必须确认客户端发送的SYN,而且在回应客户端的时候必须也要发送一个SYN告诉客户端自己在连接中发送的初始化序列号;
  • 客户端必须确认服务器端发送的SYN。

2、TCP四次挥手断开连接

  1. 第一次挥手:客户端发送一个FIN=M(释放连接),来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态,意思就是告诉服务器端:“我没有数据要发送给你了,如果你服务器端还有数据没有完成就不需要关闭连接可以继续发送数据”;
  2. 第二次挥手:服务器端收到客户端发送的FIN之后,先发送ack=M+1,告诉客户端:“你发送的请求我收到了,但是我还有数据没有完成请继续等待”此时客户端就进入到FIN_WAIT_2等待状态;
  3. 第三次挥手:当服务器端确定数据已经接收完成,给客户端发送FIN=N报文,告诉客户端:“我已经完成数据接收,可以关闭连接了,届时服务器端进入LAST_ACK状态”。
  4. 第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是为了以防万一,他还需要给服务器端再次发送ack=N+1后进入TIME_WAIT状态,如果服务器端没有收到客户端发送的ack报文,客户端会继续重传,直到服务器端收到ack后就知道可以关闭连接了,客户端等待一段时间(2*MSL((Maximum Segment Life))后依然没有收到回复,则证明服务器端已经正常关闭;届时客户端也关闭连接,完成四次握手关闭连接。

    TCP连接的可靠性体现:
    (1)TCP报文的长度可变,根据收发双方的缓存状态、网络状态而调整;
    (2)当TCP收到发自TCP连接另一端的数据,它将发送一个确认;
    (3)当TCP发送一个段后,它启动一个定时器,等待目的端确认收到这个报文段,如果不嫩发即使收到一个确认,将重发这个报文段;
    (4)TCP将保持它绸布和数据的检验和,如果通过检验和发现报文段有差错,这个报文段将被丢弃,等待超时重传;
    (5)TCP将数据按字节排序,报文段中有序号,以确保顺序的正确性;
    (6)TCP还能提供流量控制,TCP连接的每一方都有收发缓存,TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这将防止较快主机致使减慢主机的缓冲区溢出。
    TCP报文传输采用接收后返回确认的方式来保证报文传输的可靠性传输,并不意味着发送方在发送一个报文段后就进入等待确认状态,让后面的报文等待,也不是接收方在接收到一个报文后,对每一个报文都要进行报文确认。

TCP/IP协议——三路握手、四路挥手相关推荐

  1. TCP/IP协议,握手,挥手

    TCP协议详解 - 王先生架构 - 博客园 TCP的三次握手与四次挥手理解及面试题(很全面) - 李卓航 - 博客园 为什么需要三次握手和四次挥手_白小狮的博客-CSDN博客_为什么要三次挥手 Wir ...

  2. TCP/IP 协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是"虚拟局域网".LAN可以是由少数几台家用计算机构成的网络,也可以是 ...

  3. 白话解说TCP/IP协议三次握手和四次挥手

    白话解说TCP/IP协议三次握手和四次挥手 1.背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 1.1.问题 有时候聊天的过程中,我的 ...

  4. 【计算机网络】TCP/IP协议(DNS协议、IP协议、TCP协议、UDP协议、三次握手、四次挥手)

    TCP/IP协议 TCP/IP协议 TCP/IP各层作用与常见协议 各种协议与HTTP协议的关系 TCP/IP协议 本文参考<图解HTTP>--上野宣 TCP/IP是Internet上所有 ...

  5. 3.TCP/IP协议,三次握手,四次挥手,UDP协议

    TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇.TCP/IP协议不仅 ...

  6. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)...

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义:       这里 ...

  7. python网络通信效率_Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)...

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义: 这里的客户端一般 ...

  8. 唤醒手腕 TCP/IP 协议进行三次握手、四次挥手建立连接详细介绍

    访问域名的 IP 地址,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的 WEB 程序(常用的有 Apache(httpd), ngi ...

  9. ​TCP/IP协议三次握手和四次挥手

    TCP/IP简介: TCP/IP 是不同的通信协议的大集合. 是指能够在多个不同网络间实现信息传输的协议族.TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP.SMTP.TCP.U ...

最新文章

  1. 新能源汽车会是一阵风吗
  2. 使用Hexo在Github搭建静态博客
  3. kernel笔记——块I/O
  4. 解决外部工具链接CRM失败的问题
  5. 网骗欺诈?网络裸奔?都是因为 HTTP?
  6. webScoket的浅短的认识
  7. 字节流读数据 一次读一个字节
  8. linux查找超过一定时间的文件,并批量删除
  9. excel f2键功能_您的功能键在Microsoft Excel中做什么
  10. AdMob广告变现:新增开屏广告
  11. iOS 应用架构谈:view 层的组织和调用方案
  12. 基于STM32的智能台灯
  13. 猎聘Q1营收毛利齐增,在线招聘的“春天”要来了么?
  14. Android版:验证手机号码的正则表达式
  15. 软件加入使用时间_新人如何才能玩转时间机器字幕制作软件?时间机器字幕制作软件使用测评...
  16. Qt中UI线程与子线程的交互
  17. uniapp动态显隐导航栏图标
  18. 安全隔离与信息交换读书笔记
  19. New Phytologist | 中科院南土所孙波/梁玉婷组揭示促进低肥力土壤中作物生长的微生物策略...
  20. 基于java+swing的潜艇大战项目游戏(java+swing)

热门文章

  1. 用Annchain,加分
  2. Linux系统使用LAMP架构部署Discuz论坛系统,简洁明了
  3. Unity Bolt
  4. python挖掘chinaz长尾词脚本代码分享
  5. 【攻略】前端特工 - 腾讯CodeStar代码星计划
  6. java循环语句有哪三类_java中的循环语句有哪些
  7. Java 实现栈的三种方式
  8. 解决 HP Deskjet 1000 打印字体模糊
  9. 使用AutoCAD创建管道并导出PCF文件
  10. 惠普实习笔记(一):入门servlet