系统学习TCP/IP协议(二)------连接建立与关闭

TCP协议与UDP协议的区别以及与TCP/IP协议的联系 先介绍下什么是TCP,什么是UDP。 1. 什么是TCP? TCP(Transmission Control Protocol,传输控制协议)是面向连接的、可靠的字节流服务,也就是说,在收发数据前,必须和对方建立可靠的连接。这一过程和打电话类似:先拨号振铃,等待对方接电话,说喂,再说自己是谁。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的传输层。 面向有连接 2. 什么是UDP? UDP (User Datagram Protocol 阅读详情

TCP的可靠传输首先是建立在可靠的连接建立与关闭之上,这一块包含以下要点:

  • TCP三次握手建立连接
  • TCP半关闭
  • TCP的状态变迁
  • TCP服务端监听和处理设计

TCP三次握手建立连接

TCP为了通信双方确认建立起连接,设计了三次握手的策略,三次握手的过程如下:

1) 请求端发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。
2) 服务器发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。
3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认

举一个实例:

为什么是三次握手?

对于这个问题,网络编程中的一个经典的规则也许能给一些提示:别人告诉你成功了那一定是成功了,没告诉你成功不一定是没成功。因此,如果是设计成两次握手,就有可能是被连接方第一次发出ack消息后,就处于成功建立连接的状态,但这条消息丢失了,主动连接方因为没有收到这个ack消息会认为建立连接失败,也许会放弃连接或启动新的连接,但被连接方会一直监听那个它误认为成功的连接。采用三次握手,前两次握手任何一次失败都会导致连接双方都处于未连接状态,第三次失败只会导致连接方处于成功状态,但做主动连接方,肯定会在连接不久后通过这个连接发送数据,这样就可以利用这个机制做进一步的容错。

通过tcpdump工具能很清晰地看到三次握手的过程,先在主机B(itbu_qa17)上打开tcpdump监控

/usr/local/sbin/tcpdump port 80 and host 10.19.14.1

然后主机A(10.19.14.1) telnet到主机B,tcpdump监控结果如下:

TCP半关闭

TCP半关闭时TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。因此,连接关闭的过程需要连接双方都要发起关闭连接的消息,示意图如下所示:

为什么要设计成半关闭?

设计成半关闭主要是存在无需发送数据,只需接收数据的需求,并且可以通过发起单方面的关闭请求标志已发送数据完成。如果没有半关闭的需求,就得建立两个连接。

通过tcpdump工具能很清晰地看到三次握手的过程,主机A(10.19.14.1) telnet到主机B,然后在主机B(itbu_qa17)上打开tcpdump监控

/usr/local/sbin/tcpdump port 80 and host 10.19.14.1

然后主机A关闭telnet,tcpdump监控结果如下:

TCP的状态变迁

连接双方从新建连接到建立连接再到关闭连接,会经历一些状态,这些状态在分析问题时非常重要,状态变迁全景图如下所示:

就连接双方的建立连接和关闭连接过程来看,状态变迁序列图如下所示:

TCP服务端监听和处理设计

TCP服务端一般设计为连接建立后一个进程监听端口,当一个新的连接请求到达服务器时,服务器接受这个请求,并调用一个新进程来处理这个新的客户请求。以telnet为例,使用netstat查看服务端监听状态为LISTEN,如下图所示:

当有客户端telnet过来时,监听进程会起另外的进程来处理,如下图所示:

TCP/IP协议详解与TCP连接管理 本文深入探讨了TCP/IP协议中的BOOTP协议和TCP协议的工作原理。详细分析了BOOTP协议在引导无盘系统时的作用,以及TCP协议提供的面向连接的可靠传输服务。通过具体案例和步骤解析了TCP连接的建立、数据传输和终止过程,以及在各种网络条件下的超时处理和流量控制机制。 阅读详情

相关推荐

NCCL使用指南-进阶篇

前文介绍了NCCL的常用环境变量,本文介绍了NCCL-test性能基准测试,以及一些大规模集群测试的经验数据。

father_yingying的博客 1403

网络编程------端口(port)

网络 端口

warmmaple的博客 602

Keil中搭建自动化单元测试框架Unity

前言:   虽然一些C++的自动化单元测试框架也能用来C语言单元测试,但那样我们编写C语言程序时需要符合C++的标准,这样有一些C的特性是无法使用的,限制C的特性使用不太好,于是找了一个全部用C实现的自动化测试框架。Unity是一个简单且直接的自动化单元测试框架,它由很少的几个文件构成。 搭建环境:   1.从github上下载最新版本的Unity源码,下载链接:https://github...

程序员的自我修炼 3897

HTTP协议、URL、HTTPS协议 ----- 讲解很详细

⭐加密就是把明文(要传输的信息)进行一系列变换,生成密文.⭐解密就是把密文再进行一系列变换,还原成明文.⭐在这个加密和解密的过程中,往往需要一个或者多个中间的数据,辅助进行这个过程,这样的数据称为密钥。加密示例:假设我们要加密的消息(明文)是 "HELLO",并且我们选择的密钥是3(意味着字母表中的每个字母向后移动3位)。H -> K (因为H向后移3位是K)E -> H (E向后移3位是H)L -> O (L向后移3位是O,注意这里超过了Z则循环回A)L -> O (同上)

qq_64446981的博客 5171

配置VS Code使用Linux服务器上的Matlab

0、需求 Linux服务器上安装有Matlab 无图形界面,只能使用命令行工具,编辑文件不方便 1、VS Code插件安装 在扩展商店中搜索matlab,会出现Matlab Extension Pack,里面有整理好的matlab扩展 这里只安装了第一排的三个扩展 2、设置(Windows、Mac的设置类似,只是不同系统的文件路径不同) 安装好扩展,重启VS Code后,进行设置 打开:文件→首选项→设置(或快捷键ctrl+,),搜索matlab,结果如下图所示;直接打开完整json配置文件(图

赵彬的博客 5008

Multisim实战:从8选1到32选1数据选择器的完整搭建指南(附常见问题解决)

本文提供了一份详尽的Multisim实战指南,手把手教你从基础的8选1数据选择器开始,逐步级联搭建16选1乃至32选1数据选择器。文章深入剖析了级联的核心逻辑、片选方案以及使用译码器的专业方法,并附带了电源连接、输出冲突、信号毛刺等常见问题的诊断与解决技巧,帮助电子工程学生和爱好者扎实掌握数字电路的系统设计与仿真调试。

dd012的博客 729

TCP协议和TCP连接

TCP(Transmission Control Protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接之后才能传输数据。TCP提供超时重发、丢弃重复数据、流量控制等功能,保证数据能从一端传输到另一端。IP数据报(IP数据包)由首部和数据两部分组成。IP数据报的数据部分封装了一个TCP报文段。TCP报文段分为首部和数据两部分。

qq_42141141的博客 2913

【FF-A】第二章 Introduction

Armv8.4 架构引入了在安全状态下的虚拟化扩展。Arm® SMMU v3.2 架构[1]为安全流添加了对第2阶段翻译的支持,以补充在 Armv8.4 处理器状态下的安全 EL2 翻译制度。这些架构特性使得在安全状态下,彼此不信任的软件组件能够相互隔离。关于在安全状态下引入虚拟化扩展以及固件框架目标的更多理念可在名为《在安全世界使用虚拟化进行隔离》的白皮书[3]中找到。软件组件只能访问物理地址空间和系统资源的区域,例如 GIC 中对其正确运行必要的中断。

baron-周贺贺-代码改变世界ctw 528

HTTP协议之持久连接节省通信量

为什么80%的码农都做不了架构师?>>> ...

weixin_34415923的博客 354

高云FPGA系列教程(7):ARM GPIO外部中断

高云GN1NSR-4C共有16个GPIO,每个GPIO可配置成输入或输出模式,支持中断输入,触发方式可选择:上升沿、下降沿、高电平、低电平触发。中断优先级可通过NVIC进行设置,支持 0-7 级可编程中断优先级。

whik1194的博客 1375

第12篇:TMC2240 CoolStep节能功能|软件配置+功耗测试(保姆级)

本文介绍了TMC2240驱动芯片的CoolStep节能功能,通过动态调节电机电流实现功耗优化。CoolStep利用StallGuard技术实时检测负载,自动调整运行电流,空载时可降低50%以上功耗。文章详细讲解了节能原理、寄存器配置方法和参数校准步骤,提供可直接复用的STM32代码。该功能特别适合电池供电设备,能显著延长续航时间,同时保持电机性能稳定。配置时需注意SG阈值、电流步长等关键参数,并可与静音模式叠加使用。

BackCatK Chen的博客 916

TCP/IP协议族

TCP与UDP的不同在于数据的传输是否为基于连接的,前者是基于连接的,UDP则是非连接的。tcp为每个连接建立了一个数据缓冲区,会对字节流中的每个字节进行编号,缓冲中的字节第一个位置的编号为0,后面的每个字节编号递增。该层决定了在于对方计算机通信时,要从众多的传输路线中选择一条合适的路线【合适的一条路线是通过路由来确定的】,并把数据包传送给对方。发送端在层与层之间传输数据时,每经过一层必定会被打上一个该层所属的首部信息,反之,接收端在层与层之间传输数据时,每经过一层都会把对应的首部消去。...

contact97的博客 1556

【数据集】中国大气污染物数据集CHAP(1km空间分辨率)-韦晶团队

中国大气污染物数据集CHAP(1km空间分辨率)-韦晶团队

WW、forever的博客 2592

C#建立TCP/IP连接

C#建立TCP/IP连接在C/S模式下做网络信号传输,使用TCP/IP协议是首选。 其传输机制: 首先服务端与客户端建立套接字(socket)连接,建立完套接字后,服务端与客户端通过套接字进行数据传输。通常服务端和客户端需要各开启一个线程进行数据的接收。1.构建连接首先服务端开启套接字监听服务,然后客户端根据服务器的IP、端口进行连接。1.1服务端开启套接字Socket serverSocket

c0411034的博客 5万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TCP/IP协议的建立连接与关闭连接过程

一、建立连接(三次握手) 第一次握手:建立连接时,客户端发送SYN(seq=x)包到服务器,并进入SYN_SENT状态,等待服务器的确认。SYN:同步序列编号(Synchronize Sequence Numbers)。 第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即发送SYN+ACK包,此时服务器进入SYN_...

angshenye1935的博客 612

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TCP/IP之十:TCP连接的建立与终止

TCP是传输层的重量级成员,也是整个TCP/IP协议栈的重要组成部分,也正因为这点,协议栈的名字里面才有TCP这样的字样。TCP是端到端的通信协议,它向上层应用提供了可靠的,面向连接的服务,为了实现这样的服务,TCP采用了许多其它协议不曾用到的机制,比如序列号、滑动窗口、超时重传、慢启动等等,同步、流量控制等议题在TCP中体现得淋漓尽致。 为了分析TCP的运行机制,我们先来看看TCP的首部结构: (1)前面四个字节和UDP类似仍然是源端口号和目的端口号;Sequence Number:序列号,用于通

成长的记忆 3199

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TCP/IP建立连接,传输数据,关闭连接的具体过程以及原理分析

发送方发送带有"syn"标志位的TCP报文段作为连接请求,接收方收到连接请求后,回复一个带有"syn"标志位和"ack"标志位的TCP报文段作为连接确认。在TCP(传输控制协议)中,每个TCP报文段都有一个序列号,用于标识报文段在传输过程中的顺序。发送方使用序列号来对报文段进行编号,接收方可以利用序列号来重新排序报文段,以确保数据的正确顺序。在TCP中,接收方使用确认号来告知发送方已经成功接收到的数据字节的序列号。发送方接收到确认号后,可以确认数据已经成功传输到接收方,或者根据确认号进行重传等操作。

Panda_Parker的博客 496

TCP/IP协议

目录前言TCP报头标志位TCP开始连接TCP断开连接为什么建立连接是三次握手,而关闭连接却是四次挥手呢? 前言 TCP/IP协议是一种基础的网络传输协议,属于OSI七层架构(应用层,表示层,表示层,传输层,网络层,数据链路层,物理层)中的传输层,现在大部分传输协议都是基于该协议完成,如:http协议,https协议,websocket协议等等。 TCP报头标志位 TCP协议中在报头设计了6个标志位,来标识每一个数据包的动作,它们代表意思如下: URG:紧急标志。紧急标志为"1"表明该位有效。 ACK:确认

qq_29899535的博客 1791

TCP/IP协议详解(二):建立和关闭连接

作者: remcarpediem 联系方式:segmentfault,csdn,简书 本文转载请注明作者、文章来源,链接,版权归作者所有。  看了酷壳网站上的《TCP 的那些事儿》系列文章,有一点很受启发:锻炼一下自己是否使用较少的篇幅将TCP协议讲解清楚。一般的同学写博文,可能像摊大饼一样,篇幅较多并且罗嗦。我以前写文章时也是这个习惯,所以希望在以后的博文写作过程中,尽量使用比较短的篇幅来讲

taylor的专栏 3727

TCP/IP 协议 建立与链接

TCP的可靠传输首先是建立在可靠的连接建立与关闭之上,这一块包含以下要点: TCP三次握手建立连接 TCP半关闭 TCP的状态变迁 TCP服务端监听和处理设计 TCP三次握手建立连接 TCP为了通信双方确认建立起连接,设计了三次握手的策略,三次...

chuteng3602的博客 803

TCP/IP协议与UDP协议

1.TCP/IP协议 目前英特网上主流的网络协议是TCP/IP协议,它是一种分层的、多协议的通信体系。TCP/IP协议的作用是在网络中完成数据的传输,比如我们通过QQ交流、浏览网页、在线观看视频等等都是通过TCP/IP协议实现的。 2.TCP/IP参考模型与OSI参考模型的图示: 3.TCP协议/UDP协议 TCP协议/UDP协议都是在传输层进行工作的,即在程序之间传输数据。它们传输的数据可以是文本文件、图片、视频等,对于TCP协议和UDP协议,文本文件、图片、视频等数据都是二进制数。 4.TCP协议和

weixin_47062907的博客 1025

TCP/TP协议的建立链接过程详述

TCP/IP 状态机,如下图所示: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。 (SYN包表示标志位syn=1,ACK包表示标志位ack=1,SYN+ACK包表示标志位syn=1,ack=1) (1) 第一次握手:建立连接时,客户端A发送SYN包(SEQ_NUMBER=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。 (2)

只怪那时年少轻狂 2923

TCP的三次握手(建立连接)与 四次挥手(关闭连接)

一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: TCP报文格式上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标...

zzz19的博客 247

HTTP协议与TCP/IP协议的长连接与短连接

1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接。 HTTP属于应用层协议 传输层使用TCP协议 在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。 2. 如何理解HTTP协议是无状态的 HT...

glamour2015的博客 788
上一篇: 系统学习TCP/IP协议(一)------有用的策略和模式
下一篇: 单点登录SSO的实现原理
cutesource
博客等级 码龄17年 5041粉丝 151原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值