TCP的特点

  1. 面向连接:TCP是面向连接的运输层协议,通过TCP发送数据需要先建立连接,通信结束后需要释放连接
  2. 可靠传输:TCP实现了可靠传输,使得数据能够无丢失、无差错、不重复地到达接收端
  3. 面向字节流:TCP会将应用层的数据划分成大小不等的数据块,数据块以字节为单位

TCP连接

使用TCP传输数据需要建立连接,而连接的端点并不是主机,也不是进程,而是叫做套接字(Socket)。

套接字由ip地址和端口号构成,即socket=(ip:端口号)。每一条TCP连接被通信两端的套接字唯一确定。

建立连接,三次握手

TCP建立连接时有三次数据传递,所以称为三次握手。三次握手的具体过程如图:

  • 第一次握手是由客户端发起的SYN,并附带了序列号seq
  • 第二次握手是服务端在收到客户端的SYN后,反馈给客户端SYN/ACK,并带seq和ack
  • 第三次握手是客户端收到服务端的SYN/ACK后,发送ACK
  • 当服务端收到了最后一次ACK后,连接就算成功建立了

为什么三次握手?

1、避免重复连接报文造成混乱

如图上的情况,加入客户端先发起一个连接,seq=100,但是因为某种原因该报文在网络中阻塞,没有到达服务端。

因为长时间没有收到服务端的回复,客户端将重新发起连接,seq=200。

如果此时seq=100的报文先到达了服务端,服务端将会返回ack=100+1的SYN/ACK报文。客户端收到该报文后会发现ack与自己期望的ack=200+1不同,因此客户端会发送RST报文中止这次连接。

seq=200到达服务端后,就会正常地完成三次握手。

假如是两次握手会怎样?

客户端单方面中止了重复的连接,但是服务端并不知道。如果seq=200在之后到达,连接会陷入混乱。

2、确认双方的接收、发送能力

要确认双方的接收、发送能力,那么双方必须各作为发送方和接收方一次。既然这样就需要两个来回,即四次握手。

四次握手的中间两次都是从服务端到客户端的,既然如此可以将这两次握手合并,从而得到了精简的三次握手。

释放连接,四次挥手

TCP连接的释放经历了四次数据传送,所以称为四次挥手。

  1. 首先由客户端发起关闭,发送FIN报文,并附带seq=u。
  2. 服务端收到后,发送ACK报文,附带seq以及ack=u+1。
  3. 当服务端完成剩下的数据传送后,会发送FIN/ACK报文,并附带seq=w,ack=u+1。
  4. 客户端收到后,发送ACK报文,seq=u+1,ack=w+1表示收到,然后服务端关闭,连接释放完成。

为什么四次挥手?

假如我有一个朋友,我正在与他交流。我想说的话说完了,于是我提出了”我说完了“。朋友此时会回应他知道了,但是他可能没有说完。于是他讲继续讲,直到讲完后说”我也说完了,再见“。此时我再回复”再见“才表示此次交流结束了。

为什么等待2MSL

MSL(Max Segment Lifetime)最大报文生存时间,它是一个报文最长的存活时间。

加入客户端最后发送的ACK没有到达,那么服务端会认为是自己的FIN/ACK未送达,所以服务端会重发FIN/ACK。

网络正常的情况下,客户端的ACK最迟在1MSL后到达,服务端重发的FIN/ACK也是在1MSL后到达。

也就是说,从客户端收到FIN/ACK开始,到客户端接收到服务端第二次发送的FIN/ACK的时间不会超过2MSL。

所以客户端只需要等待2 MSL来处理服务端重发的FIN/ACK即可。

运输层协议:TCP连接建立与释放的更多相关文章

  1. 运输层协议TCP和UDP

    运输层协议TCP和UDP 一.用户数据报协议 UDP 1.1.UDP 概述 UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能. 虽然 UDP 用户数据报只能提供不 ...

  2. 运输层协议--TCP及UDP协议

    TCP及UDP协议 按照网络的五层分级结构来看,TCP及UDP位于运输层,故TCP及UDP是运输层协议.TCP协议--传输控制协议UDP协议--用户数据报协议 多路复用及多路分解 图多路复用及多路分解 ...

  3. TCP连接建立与释放

    tcp建立连接 tcp连接的建立需要经历”三次握手“的过程.过程如下 client发送SYN包(值为j)以及SEQ包到server端,此时client进入SYN_SEND状态.此为第一次握手. ser ...

  4. 计算机网络传输层之TCP协议(tcp协议特点、tcp报文段首部格式、tcp连接建立---三次握手、tcp连接释放---四次握手)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105516090 学习课程:<2019王道考研计算机网络> 学习目的 ...

  5. 网络协议抓包分析——TCP传输控制协议(连接建立、释放)

    前言 TCP协议为数据提供可靠的端到端的传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方.TCP协议是面向连接的,在两台主机使用TCP协议进行通信之前,会先建立一个TCP连接(三次握手) ...

  6. TCP协议-连接建立和释放

    三次握手: (1)客户端向服务器端TCP请求连接,向服务器端发送控制位SYN=1,序号seq=x的请求报文.(x是随机产生的,且不能为0) (2)服务器端接收到请求报文后,若同意建立连接,则向客户端发 ...

  7. 运输层和TCP/IP协议

    0. 基本要点 运输层是为相互通信的应用进程提供逻辑通信. 端口和套接字的意义 什么是无连接UDP 什么是面向连接的TCP 在不可靠的网络上实现可靠传输的工作原理,停止等待协议和ARQ协议 TCP的滑 ...

  8. 计算机网络基础笔记 运输层协议UDP/TCP

    目录 UDP 首部结构 主要特点 TCP 首部结构 主要特点 TCP 可靠性实现 停止等待ARQ协议 连续ARQ协议&滑动窗口协议 拥塞控制 TCP 运输连接管理 连接建立:三次握手 连接释放 ...

  9. TCP传输连接建立与释放详解

    一直以来有许多读者朋友对TCP的传输连接建立和释放过程不是很理解,而这又是几乎网络认证中必考的知识点,包括软考.CCNA\CCNP.H3CNA\H3CNE等,为此再把笔者年度巨作,广受好评的——< ...

随机推荐

  1. Mybatis学习笔记-配置解析

    核心配置文件 mybatis-config.xml properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFa ...

  2. Lateral Movement

    简介 这次去宁夏护网,发现我有的朋友连最基本的横向渗透有些都不晓得,他们问我 我也表达不清楚...,就想着写篇文章总结下吧 (慢慢更..) 可以发我邮箱讨论:muxue@protonmail.com ...

  3. WPF(MVVM) 利用资源字典实现中英文动态切换

    1.首先新建两个字典文件en-us.xaml.zh-cn.xaml.定义中英文的字符串在这里面. 2.将两个资源字典添加到App.xaml中,这里注意下,因为两个字典中有同样字符,如果没有动态更改,默 ...

  4. 计算机毕业设计项目-基于SSM的学生会管理系统-基于ssm的社团信息管理系统

    注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台框架:SSM 前端技术:HTML+CSS+JavaScript+Bootstrap+jQuery 数据库: ...

  5. Linux 基础学习篇 序篇

    读序篇可以知道的: 1.有些指令知道前和知道后,自己的操作是完全不同的,可能知道前,会用reset把系统重新启动一遍,而知道后会使用ps和kill来关闭进程. 2.如果对Linus的学习知识" ...

  6. Python语言系列-04-高阶函数

    闭包 #!/usr/bin/env python3 # author:Alnk(李成果) # 什么是闭包 # 1,闭包存在于函数中 # 2,闭包就是内层函数对外层函数(非全局变量)的引用 # 3,最内 ...

  7. SpringBoot开发十五-发布帖子

    需求介绍 使用 AJAX 异步通信实现网页能够增量的更新呈现到页面上而不需要刷新整个页面. 现在基本上都是服务器返回 JSON 字符串来解析 代码实现 使用 JQuery 发送 AJAX 请求. 首先 ...

  8. JVM快速扫盲篇

    JVM虚拟机基础 JVM虚拟机结构 vm的整体结构大致如下: 类加载器:类加载器用来加载Java类到JVM虚拟机中,源代码程序.java文件在经过编译器编译之后就被转换成字节代码.class文件,类加 ...

  9. Tomcat配置SSL证书(PFX证书)

    公司项目,应该是阿里云服务器 在windows2008 R2搭建的 Tomcat部署SSL证书,本文以PFX证书为例. 配置好之后开始 一.什么是SSL(证书)? SSL证书服务(Alibaba Cl ...

  10. VirtualBox-虚拟硬盘扩容-win7

    问题: 我在VirtualBox下搭建的win7系统只设置了一个C盘,当初只给硬盘分配32G,如今深受生活的毒打,发现只剩5G可用,装个PS都费劲. 我要扩容,扩容! 当前环境: VirtualBox ...