首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
课程
专栏·文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
牛客720843361号
华为_软件开发
发布于江苏
关注
已关注
取消关注
@赛博二哈:
【计网】04.TCP三次握手四次挥手
【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM 【嵌入式八股】二、计算机基础篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym 【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM 【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0 传输层TCP/UDP TCP三次握手四次挥手 66.TCP头部中有哪些信息? TCP数据报格式(左图) UDP数据报格式也放这(右图),不具体解释了。 结合三次握手四次挥手来看 端口: 区分应用层的不同应用进程 扩展:应用程序的端口号和应用程序所在主机的 IP 地址统称为 socket(套接字),IP:端口号, 在互联网上 socket 唯一标识每一个应用程序,源端口+源IP+目的端口+目的IP称为”套接字对“,一对套接字就是一个连接,一个客户端与服务器之间的连接。 序号seq(32bit): 传输方向上字节流的字节编号。用于 TCP 通信过程中某一传输方向上字节流的每个字节的编号,为了确保数据通信的有序性,避免网络中乱序的问题。接收端根据这个编号进行确认,保证分割的数据段在原始数据包的位置。初始时序号会被设置一个随机的初始值(ISN),之后每次发送数据时,序号值 = ISN + 数据在整个字节流中的偏移。假设A -> B且ISN = 1024,第一段数据512字节已经到B,则第二段数据发送时序号为1024 + 512。 确认序号ack(32bit): 确认序列号是接收确认端所期望收到的下一序列号。确认序号应当是上次已成功收到数据字节序号seq加1,只有当标志位中的 ACK 标志为 1 时该确认序列号的字段才有效。主要用来解决不丢包的问题。 首部长(4bit): 标识首部有多少个4字节 * 首部长,最大为15,即60字节。 标志位(6bit): URG:(urgent紧急) 标志紧急指针是否有效。 ACK:(acknowledgement 确认)标志确认号是否有效(确认报文段)。用于解决丢包问题。 PSH:(push传送) 提示接收端立即从缓冲读走数据。 RST:(reset重置) 表示要求对方重新建立连接(复位报文段)。 SYN:(synchronous同步) 表示请求建立一个连接(连接报文段)。 FIN:(finish结束) 表示关闭连接(断开报文段)。 窗口(16bit): 接收窗口,滑动窗口大小。用于告知对方(发送方)本方的缓冲还能接收多少字节数据。用于解决流控。 校验和(16bit): 接收端用CRC检验整个报文段有无损坏。 紧急指针(16bit): 紧急指针表示紧急数据的末尾位置,用于标识紧急数据的范围。 67.端口有效范围是多少到多少? 端口号的有效范围是从0到65535,其中0被保留,不能用于应用程序端口号。其中,0到1023是系统保留端口,一些常用的端口号也被规定为某些服务的默认端口号。例如,HTTP的默认端口号是80,HTTPS的默认端口号是443,SSH的默认端口号是22等。 1024到49151是注册端口范围,一些应用程序可以使用这些端口号,但并没有被正式分配给任何特定的服务。这些端口号通常被用于客户端程序和服务端程序之间的通信。 49152到65535是动态或私有端口范围,这些端口号可以由应用程序动态分配和使用,但不会被分配给任何特定的服务。这些端口号通常被用于客户端程序和服务端程序之间的通信。 68.一台机器能够使用的端口号上限是否可以修改?如果想要用的端口超过这个限制怎么办? 大多数操作系统默认允许使用的动态端口数量为几千个,但是可以通过修改系统内核参数来增加这个数量。不过,修改这些参数需要管理员权限和谨慎操作,否则可能会导致系统出现问题或安全漏洞。 如果需要使用的端口超过了机器的限制,一种常见的做法是使用负载均衡器或代理服务器。可以将请求发送到负载均衡器或代理服务器,再由它们转发到实际的服务端口,从而实现同时支持多个服务。 69.简述一下TCP建立连接和断开连接的过程。 三次握手 TCP建立连接过程(三次握手): 客户端向服务端发送SYN包(SYN=1,ACK=0),表示请求建立连接,并指定客户端的初始序列号seq=x。客户端进入 SYN_SENT状态,等待Server确认。 服务端收到客户端的SYN=1知道Client请求建立连接,向客户端发送SYN/ACK包(SYN=1,ACK=1),表示同意建立连接,并指定服务端的初始序列号seq=y,同时确认客户端的序列号ack=x+1。服务端进入 SYN_RCVD状态。 客户端收到服务端的SYN/ACK包后,检查ack是否为x+1,ACK是否为1,如果正确则向服务端发送ACK包(SYN=0,ACK=1),确认建立连接,并指定确认序列号ack=y+1。服务端检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,客户端和服务端进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。 四次挥手 TCP断开连接过程(四次挥手): 客户端向服务端发送FIN包(FIN=1,ACK=1),表示请求断开连接,并指定序列号seq=x。客户端进入 FIN_WAIT_1状态,此时客户端依然可以接收服务器发送来的数据。 服务端收到客户端的FIN包后,向客户端发送ACK包(ACK=1),确认接收到了断开连接请求,并指定确认序列号ack=x+1。服务器进入CLOSE_WAIT 状态。客户端收到后进入FIN_WAIT_2状态。 当服务器没有数据要发送时,发送FIN包(FIN=1,ACK=1),请求断开连接,并指定序列号seq=y。此时服务器进入LAST_ACK状态,等待客户端的确认。 客户端收到服务端的FIN包后,向服务端发送ACK包(ACK=1),确认接收到了断开连接请求,并指定确认序列号ack=y+1。此时客户端进入TIME_WAIT状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接。 完整过程 70.常见TCP的连接状态有哪些? 请你说一说TCP的模型,状态转移。 CLOSED:初始状态。 LISTEN:服务器处于监听状态。 SYN_SEND:客户端socket执行CONNECT连接,发送SYN包,进入此状态。 SYN_RECV:服务端收到SYN包并发送服务端SYN包,进入此状态。 ESTABLISH:表示连接建立。客户端发送了最后一个ACK包后进入此状态,服务端接收到ACK包后进入此状态。 FIN_WAIT_1:终止连接的一方(通常是客户机)发送了FIN报文后进入。等待对方FIN。 CLOSE_WAIT:(假设服务器)接收到客户机FIN包之后等待关闭的阶段。在接收到对方的FIN包之后,自然是需要立即回复ACK包的,表示已经知道断开请求。但是本方是否立即断开连接(发送FIN包)取决于是否还有剩余数据需要发送给客户端,若有,则在发送FIN包之前均为此状态。 FIN_WAIT_2:此时是半连接状态,即有一方要求关闭连接,等待另一方关闭。发送断开请求一方还有接收数据能力,但已经没有发送数据能力。客户端接收到服务器的ACK包,但并没有立即接收到服务端的FIN包,进入FIN_WAIT_2状态。 LAST_ACK:服务端发动最后的FIN包,等待最后的客户端ACK响应,进入此状态。 TIME_WAIT:客户端收到服务端的FIN包,并立即发出ACK包做最后的确认,在此之后的2MSL时间称为TIME_WAIT状态。在2MSL时间内,同一个socket不能再被使用,否则有可能会和旧连接数据混淆(如果新连接和旧连接的socket相同的话)。 如果客户端直接进入CLOSED状态,如果服务端没有接收到最后一次ACK包会在超时之后重新再发FIN包,此时因为客户端已经CLOSED,服务端就不会收到ACK而是收到RST。所以TIME_WAIT状态是防止最后一次握手数据没有到达对方而触发重传FIN准备的。 关发接建,1关2最 71.TCP的三次握手和四次挥手的原因是什么? 为什么TCP建立连接是三次握手,而关闭连接却是四次挥手? 为什么是三次握手? 三次握手才可以阻止重复历史连接的初始化(主因) 三次握手才可以同步双方的初始序列号 三次握手才可以避免资源浪费 解释: 1、阻止重复历史连接的初始化(主因) 为了防止已失效的连接请求报文段突然有送到了B,而产生错误 假设两次握手时,A发出的第一个请求连接报文段在某一网络节点长时间滞留,以致延误到连接释放后才到达B。B收到失效的连接请求报文段后,认为是A又发出一次新的连接请求。于是向A发送确认报文段,同意建立连接,此时在假定两次握手的前提下,连接建立成功。这样会导致B的资源白白浪费。 如果已失效的连接请求报文段突然又送到了服务端 当旧的SYN报文先到达服务端时,服务端回⼀个ACK+SYN报文。 客户端收到后可以根据自身的上下文,判断这是⼀个历史连接(序列号过期或超时),那么客户端就会发送RST 报文给服务端,表示中止这一次连接。 两次握手在收到服务端的响应后开始发生数据,不能判断当前连接是否是历史连接。 三次握手可以在客户端准备发送第三次报文时,客户端因有足够的上下文来判断当前连接是否是历史连接。 2、同步双方的初始序列号 TCP 协议的通信双方, 都必须维护⼀个「序列号」 , 序列号是可靠传输的⼀个关键因素。 接收端可以去除重复数据。 接收端可以按照序列号顺序接收。 标识发送的数据包,哪些已经被收到。 两次握手只保证了一方的初始序列号能被对方成功接收,没办法保证双方的初始序列号都能被确认接收。 三次握手一来一回,才能确保双方的初始序列号能被可靠的同步。 3、避免资源浪费。 两次握手会造成消息滞留情况下,服务器重复接受无用的连接请求 SYN 报文,而造成重复分配资源。 只有两次握手时,如果客户端的SYN请求连接在网络中阻塞,客户端没有收到服务端的ACK报文,会重新发送SYN。 由于没有第三次握手,服务器不清楚客户端是否收到了自己发送的建立连接的 ACK 确认信号,所以每收到一个 SYN 就只能先主动建立个连接。 为什么是四次挥手? TCP协议是全双工通信,这意味着客户端和服务器端都可以向彼此发送数据,所以关闭连接是双方都需要确认的共同行为。 服务端通常需要等待完成数据的发送和处理, 所以服务端的ACK和FIN⼀般都会分开发送,从而比三次握手导致多了⼀次。 关闭连接时,客户端发送FIN报文,表示其不再发送数据, 但还可以接收数据。 服务端收到FIN报文,先回一个ACK应答报文,服务端可能还要数据需要处理和发送,等到其不再发送数据时,才发送FIN报文给客户端表示同意关闭连接。 如果采用三次挥手来关闭连接,可能会出现以下问题: 客户端发送FIN报文后,服务端无法确认客户端是否真的已经关闭了连接,因此需要等待一段时间才能确认客户端已经关闭连接。 服务端发送FIN报文后,
点赞 3
评论 0
全部评论
推荐
最新
楼层
网易互娱
校招火热招聘中
官网直投
相关推荐
软件部长
05-16 10:16
研发工程师
JVS物联网模拟点位:业务调试与数据展示的操作指南
模拟点位功能描述模拟点位常用于业务的调试或数据展示,通过配置对应点位实现自动生成点位数据的功能。界面操作如下图所示,从模拟点位菜单进入模拟点位管理界面模拟点位新增点击新增按钮,如下图所示:①:用户自定义点位的名称②:系统自动生成点位的标识③:点位的数据类型,包括int、float、double、long、string④:设置点位初始值⑤:生成方式包括固定值、随机生成数(设置最小、最大、生成周期)、自增序列(最大与生成周期)⑥:设置模拟点位的描述内容在线demo:http://iot.bctools.cn
点赞
评论
收藏
转发
乘凉一度时光
04-09 12:04
南京邮电大学 自动化类
上来就挂,什么原因啊,怎么说
请求指点一下
点赞
评论
收藏
转发
errordata
05-16 14:37
前端工程师
北银金科春招,你们的简历投递系统是真除笙!bug太烂太坑
你们这系统点击之后,只需要上传pdf,结果投递过i去,根本没有提醒要跟新在线简历,直接给我一个拒信?????????我点进去一看,你们的在线简历设置和我上传的pdf完全不匹配,根本不会自动解析,导致后台hr审核简历的时候会看到空着的在线简历,你们这招聘系统这么坑爹的嘛???????????这么简单的bug,不会修改,让✌投过去,白白浪费一个机会?????
春招你拿到offer了吗
点赞
评论
收藏
转发
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
开摆了,写小说去了
9004
2
...
没offer的我们也很优秀偶
7870
3
...
【有奖活动】浅聊一下我的实习⭐
7573
4
...
双非本 腾讯WXG暑期已offer | 附面经
7276
5
...
华为暑期开奖
6796
6
...
滴滴秋储-服务端开发 OC
5584
7
...
快手二面凉经
5246
8
...
华为实习offer!终于告一段落了
5246
9
...
美团前端一二面(已oc
5053
10
...
快手客户端开发工程师(1)
4708
正在热议
#
牛客帮帮团来啦!有问必答
#
822005次浏览
13035人参与
#
机械制造薪资爆料
#
320033次浏览
3732人参与
#
晒一晒我的offer
#
3467249次浏览
55259人参与
#
0offer是寒冬太冷还是我太菜
#
427984次浏览
4945人参与
#
你觉得找工作该拿大厂还是小厂练手
#
61616次浏览
872人参与
#
荣耀求职进展汇总
#
70622次浏览
717人参与
#
如果可以选,你最想从事什么工作
#
186064次浏览
3078人参与
#
实习生应该准时下班吗
#
80737次浏览
592人参与
#
金三银四,你有感觉到吗
#
329196次浏览
4222人参与
#
海康威视求职进展汇总
#
101601次浏览
1217人参与
#
正在春招的你,也参与了去年秋招吗?
#
136463次浏览
1705人参与
#
实习必须要去大厂吗?
#
13837次浏览
219人参与
#
实习工作,你找得还顺利吗?
#
42422次浏览
469人参与
#
我在牛爱网找对象
#
49806次浏览
322人参与
#
软件开发投递记录
#
479143次浏览
7243人参与
#
宁德时代求职进展汇总
#
37057次浏览
413人参与
#
国企vs私企,你更想去?
#
20271次浏览
205人参与
#
求职遇到的搞笑事件
#
19675次浏览
287人参与
#
想实习转正,又想准备秋招,我该怎么办
#
117848次浏览
1328人参与
#
正在实习的你,有转正机会吗?
#
106422次浏览
1043人参与
牛客网
牛客企业服务