你不得不知道的TCP的三次握手和四次挥手!

详情见:https://www.yuque.com/zaygee/tvg571/imghbh

1.tcp的报头

image.png

校验和:

发送端填充,CRC校验(循环冗余校验码(CRC),简称循环码)接收校验不通过,则认为数据有问题,和UDP校验的是数据本身,TCP校验的包含TCP首部、TCP数据部分

紧急指针:

只有在URG为1时有效 ,该字段为1表示报文中的紧急数据的指针

选项:

用于提高TCP的传输性能,根据首部长度控制,其最大长度为40字节

 

2.6个标志位

URG:The urgent pointer,紧急标志指针,为1,表示某一位需要被优先处理

PSH:推标志,提示接收端应用程序立即从TCP缓冲区把数据读走

ACK:Acknowledgement Number,确认标志,确认号是否有效,一般置为1

RST:复位标志有效。当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接

SYN:Synchronize Sequence Numbers,请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1

FIN:结束标志,FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接

3.三次握手

第一次握手:

建立连接,客户端向服务端发送请求数据包,标志位SYN置为1,ACK为0,发送顺序号seq=X(随机int), 并进入SYN_SENT状态, 等待服务器确认

第二次握手:

服务器收到请求,需要确认客户端的数据包,发送SYN+ACK, SYN=1,ACK =1,并含有服务端的初始序号                   seq=Y(随机int),以及服务端对客户端初始序号的确认,ACK=seq(客户端)+1(X+1)

第三次握手:

客户端接收到服务端的确认,向服务器发送一序列号,确认号ACK=Y+1,此后客户端和服务端进入                                    ESTAB_LISHED状态,完成三次握手
 

4.四次挥手

第一次挥手:主动关闭方发送第一个包,其中FIN标志位为1,发送顺序号seq为X。

第二次挥手:被动关闭方收到FIN包后发送第二个包,其中发送顺序号seq为Z,接收顺序号ack为X+1。

第三次挥手:被动关闭方再发送第三个包,其中FIN标志位为1,发送顺序号seq为Y,接收顺序号ack为X。

第四次挥手:主动关闭方发送第四个包,其中发送顺序号为X,接收顺序号为Y。至此,完成四次挥手

 

5.常见问题

1.浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?

在 HTTP/1.0 中,一个服务器在发送完一个 HTTP 响应后,会断开 TCP 链接。但是这样每次请求都会重新建立和断开 TCP 连接,代价过大。所以虽然标准中没有设定,某些服务器对 Connection: keep-alive 的 Header 进行了支持,

持久连接:既然维持 TCP 连接好处这么多,HTTP/1.1 就把 Connection 头写进标准,并且默认开启持久连接,除非请求中写明 Connection: close,那么浏览器和服务器之间是会维持一段时间的 TCP 连接,不会一个请求结束就断掉


 

2.一个 TCP 连接可以对应几个 HTTP 请求?

如果维持链接,一个tcp连接可以对应多个http请求


 

3.一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?

在 HTTP/1.1 存在 Pipelining 技术可以完成这个多个请求同时发送,但是由于浏览器默认关闭,所以可以认为这是不可行的。在 HTTP2 中由于 Multiplexing 特点的存在,多个 HTTP 请求可以在同一个 TCP 连接中并行进行


 

4.为什么有的时候刷新页面不需要重新建立 SSL 连接?

tcp连接有的时候会被浏览器和服务器会维持一段时间,tcp不需要重新连接,自然不需要重新建立ssl连接


 

 

5.浏览器对同一 Host 建立 TCP 连接到数量有没有限制?

Chrome 最多允许对同一个 Host 建立六个 TCP 连接


 

6.收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢

如果图片都是HTTPS连接并且在同一个域名下,那么浏览器在ssl握手之后会和服务器商量能不能用https2,如果能用的话就使用Multiplexing 功能在这个连接进行多路传输

如果只能用http/1.1,那浏览器就会在一个host上建立多个TCP连接,连接数量的最大限制取决于浏览器的设置


 

7.为什么建立连接协议是三次握手,而关闭连接却是四次握手?

服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求时,可以把ACK和SYN放在一个报文里来发送,但是关闭连接时,当收到对方的FIN 报文通知时,仅仅表示对方没有数据发送给你了,不代表你的所有数据都发送对对方了,当你已经没有数据发送给对方了,再发送FIN报文给对方表示你同意关闭连接了


 

8.为什么TIME_WAIT状态还需要等2MSL才能返回到CLOSE状态?

一是为了保证a发送的最后一个ACK报文能够到达b,如果这个ACK报文丢失,会使处在LAST_ACK状态的b收不到对已发送的FIN和ACK报文段的确认,b会超时重传这个FIN和ACK报文段,而a就在这个2MSL时间内收到这个重传的ACK+FIN报文段,接着a重传一次确认

二是防止已失效的连接请求报文段出现在本连接中,a在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续时间内所产生的所有报文段都中网络中消失

ps:什么是2MSL?MSL即Maximum Segment Lifetime,也就是报文最大生存时间


9.为什么不能用两次握手进行连接?

把三次握手改成仅需要两次握手,有可能发生死锁,例如客户端给服务端发送一个连接请求分组,服务端收到了这个分组,并发送了确认应答分组,假如两次握手,服务端认为连接已经成功的建立了就可以开始发送数据,可是客户端服务端的应答在传输中被丢失的情况下,将无法得知服务端是否已准备好,甚至怀疑服务端是否已收到自己的连接请求,在此情况下,客户端认为连接未建立成功,将忽略服务端发来的任何数据,一心等待连接的确认,而服务端在发出的数据超时后,重复发送同样的数据,这样就形成了死锁

 

10.TCP协议和UDP协议的区别是什么?

TCP协议是有连接的,即在开始传输数据之前,TCP的客户端和服务端必须通过三次握手建立连接,会话结束后也要结束连接,而UDP是无连接的

TCP 协议保证了数据按序发送按序到达,提供超时重传,但UDP无法保证

TCP有流量控制和拥塞控制,UDP 没有,网络拥堵不会影响发送端的发送速率

TCP协议首部需20个字节,UDP首部字段只需8个字节

TCP是一对一的连接,UDP可一对多,多对多,多对一的通信

TCP 面向字节流的服务,UDP 面向报文的服务

 

 

参考原文:https://blog.csdn.net/qq_34827674/article/details/106627403

https://blog.csdn.net/weixin_44786530/article/details/89299896

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序医院挂号预约系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。微信小程序医院挂号预约系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,医生信息管理,医院信息管理,科室信息管理,预约信息管理,预约取消管理,留言板,系统管理。微信小程序用户可以注册登录,查看医院信息,查看医生信息,查看公告资讯,在科室信息里面进行预约,也可以取消预约。微信小程序医院挂号预约系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值