首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-29 14:15
郑州大学 电子信息类
两个多月!感谢团子的收留!
25毕业实习求职记录:先说说团子的面试情况吧: 大概是5月前投的团子实习,在上周二突然接到面试通知说周五面试,但是这个岗位是我的二志愿岗位(因为我本身是学java的,写后端的,但是二志愿写了前端),因此当时面试就匆忙的去学习前端知识。果不其然,除了java的其他全不会,编程题想着露一手,最后想用高效的算法却没写出来,只好给面试官口述思路。居然在昨天周一收到了二面通知,二面聊天过程非常轻松愉悦,面试官非常友好,聊了半小时就结束了,像唠家常。今天早上醒来填完团子的反馈表,马上就收到了offer,这个早上真是让我难以忘怀,这应该是真两个月最美好的一天。3-5月的经过:在这两个月中,反复修改了3...
我的实习求职记录
点赞
评论
收藏
转发
微笑向前出发
昨天 10:40
后端
建信金科工作待遇还是不错的
毕业时候就是奔着国企稳定去的,最后过关斩将的好不容易挤进去了,虽然偶尔也有辞职的念头,但是说句难听的,天下乌鸦一般黑,辞了这份工作,保不齐又掉进下一个坑中,况且目前在建信金科工作,除了偶尔有点厌烦日复一日的工作,其他的我觉得还好吧,周围同事也混熟了,待遇更不用说了,国企待遇还是不错子的,最近很火的加班问题我也看了,我们偶尔也有加班,但是是在正常范围内,还是能接受的。
投递建信金科等公司7个岗位 >
点赞
评论
收藏
转发
keryst
04-29 10:53
已编辑
东北大学 自动化类
拼多多真狠啊,工作四个月要求竞业赔偿45万
投递拼多多等公司10个岗位
点赞
评论
收藏
转发
匿名牛油
不愿透露姓名的神秘牛友
05-10 16:28
今日份最开心的一次
#26届报团取暖# 一开始说是200-250,聊了一会变成100-120了😂😂问了一下就爆出这些金句了
点赞
评论
收藏
转发
七分糖糖
05-27 14:14
贵州民族大学 工商管理类
杭州,求捞,应届毕业生
我的实习求职记录
点赞
评论
收藏
转发
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
给你们预测一下今年的秋招!
3149
2
...
深圳蟑螂真的很可怕吗
3108
3
...
【🎁】25届硬件牛牛互助计划(1期)
2910
4
...
阿里体检完还没发正式offer
2713
5
...
二本开发转测试,面试成功
2590
6
...
毕业了!
2259
7
...
海康暑期实习
2173
8
...
记录一下当前的想法 权当碎碎念
2165
9
...
5.31拼多多服务端开发实习生一面(75min)
2070
10
...
保融科技java实习面试凉经
1756
正在热议
#
和牛牛一起刷题打卡
#
14283次浏览
1310人参与
#
简历中的项目经历要怎么写?
#
14439次浏览
194人参与
#
不去互联网可以去金融科技
#
5349次浏览
69人参与
#
牛客帮帮团来啦!有问必答
#
1096674次浏览
16351人参与
#
面试被问第一学历差时该怎么回答
#
18435次浏览
202人参与
#
通信硬件薪资爆料
#
256958次浏览
2413人参与
#
工作两年想退休了
#
19448次浏览
243人参与
#
简历中的项目经历要怎么写
#
482976次浏览
8804人参与
#
如何看待offer收割机的行为
#
247070次浏览
3463人参与
#
简历无回复,你会继续海投还是优化再投?
#
23563次浏览
331人参与
#
实习生应该准时下班吗
#
93646次浏览
708人参与
#
你收到了团子的OC了吗
#
531320次浏览
6304人参与
#
参加过提前批的机械人,你们还参加秋招么
#
14121次浏览
343人参与
#
你的秋招进行到哪一步了
#
397242次浏览
6688人参与
#
晒一晒我的offer
#
3775616次浏览
58114人参与
#
你已经投递多少份简历了
#
339043次浏览
4907人参与
#
提前批和秋招有什么区别
#
29404次浏览
706人参与
#
实习与准备秋招该如何平衡
#
197783次浏览
3501人参与
#
你怎么评价今年的春招?
#
12582次浏览
194人参与
#
你的秋招进展怎么样了
#
558433次浏览
13953人参与
#
现在还是0offer,延毕还是备考
#
409671次浏览
4864人参与
牛客网
牛客企业服务