面试-快速学习计算机网络-UDP/TCP

这篇具有很好参考价值的文章主要介绍了面试-快速学习计算机网络-UDP/TCP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. OSI四层和七层映射

面试-快速学习计算机网络-UDP/TCP,面试之快速学习计算机网络,面试,学习,计算机网络
区别:

  1. 应用层,表示层,会话层合并为了应用层
  2. 数据链路层物理层合并为了网络接口层

2. TCP和UDP的区别?

面试-快速学习计算机网络-UDP/TCP,面试之快速学习计算机网络,面试,学习,计算机网络
总结:
1 . TCP 向上层提供面向连接的可靠服务 ,UDP 向上层提供无连接不可靠服务
2. UDP 没有 TCP 传输可靠,但是可以在实时性要求高的地方有所作为。
3. 对数据准确性要求高,速度可以相对较慢的,可以选用TCP。
4. 应用方面UDP实时应用比如视频直播等,TCP可靠传输比如大文件传输
5. UDP面向报文(只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。),TCP字节流
6. UDP头部开销小 8字节相比 TCP 的至少20字节要少得多,传输数据报文时是很高效的。
面试-快速学习计算机网络-UDP/TCP,面试之快速学习计算机网络,面试,学习,计算机网络

3. TCP详解

1. tcp报文头部

面试-快速学习计算机网络-UDP/TCP,面试之快速学习计算机网络,面试,学习,计算机网络
需要说明的:
源端口
目的端口
seq序号: 占4个字节,是本报文段所发送的数据项目组第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为300,而且数据共100字节,则下一个报文段的序号就是400。
ack确认序号: 占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号;确认序号应该是上次已成功收到数据字节序号+1。

注意:上述两个序号有值有效的前提是标识为1
标识位
1、URG:当URG=1时,注解此报文应尽快传送,而不要按本来的列队次序来传送。与“紧急指针”字段共同应用,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,
使接管方可以知道紧急数据共有多长。
2、ACK:只有当ACK=1时,确认序号字段才有效;
3、PSH:当PSH=1时,接收方应该尽快将本报文段立即传送给其应用层。
4、RST:当RST=1时,表示出现连接错误,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个不法的报文段或拒绝打开一个连接;
5、SYN:SYN=1,ACK=0时表示请求建立一个连接,携带SYN标志的TCP报文段为同步报文段;
6、FIN:发端完成发送任务。

2. 滑动窗口(流量控制)

滑动窗口用于流量控制: TCP流量控制主要是针对接收端的处理速度不如发送端发送速度快的问题,消除发送方使接收方缓存溢出的可能性。。可以理解成接收端所能提供的缓冲区大小。字节数起始于确认序号字段指明的值(这个值是接收端正期望接收的字节。
面试-快速学习计算机网络-UDP/TCP,面试之快速学习计算机网络,面试,学习,计算机网络

思考1: 重复发送
第一步发送了[33, 43),如果这次发送[35, 45),那中间重叠部分不是发送了两次,所以这里要 是全部重新发送还是只发送接收端没有收到的数据,如果全部发送那么重复
发送的数据接收端怎么处理。
这个下面快速重传会讲

思考2: 滑动窗口是否可是可靠性的保障?
一直传输数据,直到数据发送完成。这么一来就保证数据数据的可靠性,因为如果某数据没有获取到,那么ack永远不会跳过它。与其说是滑动窗口的可靠,不如说是ACK机制的可靠

3. 校验和

检验和覆盖了整个TCP报文段:TCP首部和数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。

4. TCP拥塞

  1. 流量控制是通过接收方来控制流量的一种方式;而拥塞控制则是通过发送方来控制流量的一种方式
  2. 发送方的让自己的发送窗口

win=min(cwnd,接受端接收窗口大小)

说明: 发送方取拥塞窗口与滑动窗口的最小值作为发送的上限。
3. TCP拥塞控制的几种方法:慢启动,拥塞避免,快重传和快恢复。

面试-快速学习计算机网络-UDP/TCP,面试之快速学习计算机网络,面试,学习,计算机网络

  • 慢启动不慢:1然后 指数增长
    cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,一旦cwnd>=ssthresh(大多数TCP的实现,通常大小都是65536)
  • 慢启动过程结束,拥塞避免阶段开始;cwnd的值不再指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加
  • 超时,重传了一个报文段把ssthresh降低为cwnd值的一半。把cwnd重新设置为1。重新进入慢启动过程。

4. 快速重传

如果,包没有连续到达,就ack最后那个可能被丢了的包,如果发送方连续收到3次相同的ack,就重传。Fast Retransmit的好处是不用等timeout了再重传,而是只是三次相同的ack就重传。

比如:如果发送方发出了1,2,3,4,5份数据,第一份先到送了,于是就ack回2,结果2因为某些原因没收到,3到达了,于是还是ack回2,后面的4和5都到了,但是还是ack回2因为2还是没有收到,于是发送端收到了三个ack=2的确认,知道了2还没有到,于是就马上重转2。然后,接收端收到了2,此时因为3,4,5都收到了,于是ack回6。

面试-快速学习计算机网络-UDP/TCP,面试之快速学习计算机网络,面试,学习,计算机网络
主要是为了避免一个问题就是当接收端发现2丢失之后我是否需要死等2,即使我先收到了3,4,5 ,等到超时再发送? 快速重传保证了,到我收到3, 4,5时不需要等2到超时,我就可以直接返回ack=2了,三次之后,发送端会自动重传3。

5. TCP状态机

面试-快速学习计算机网络-UDP/TCP,面试之快速学习计算机网络,面试,学习,计算机网络
没啥好说的理解就行
三次握手
客户端视角:
close 情况下,发起Connet,报文标志 syn , 状态变为SYN_SENT ,等待服务端返回ack (syn ack), 进入established, 之后再发ack,这时可以发送数据了(注意这个时候如果发数据可以添加syn)

服务端视角:
close 情况下,listen等待连接,收到连接后syn_recv 之后返回ack, 等待客户端ack到established

四次挥手

  • 客户端视角:
    主动请求关闭,发送FIN这个时候客户端不能发数据了,但是服务端可以发,进入FIN_WAIT1, 接收到 ACK ,进入FIN_WAIT2
    ,等待,服务端发送FIN, 这个时候进入TIME_WAIT(2MSL),并返回ack给服务端

  • 服务端视角:
    收到FIN 包, 回复ack ,进入CLOSE_WAIT, 这个时候还是可以发数据,不发了之后 发一个FIN标志的包,表示要关闭了, 进入 LAST_ACK, 收到客户端的ACK之后CLOSE

为什么客户端TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

  • 防止最后一个客户端回复的ACK服务端没有收到。服务端处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文。
  • MSL 是 Maximum Segment Lifetime,报⽂最⼤⽣存时间,它是任何报⽂在⽹络上存在的最⻓时间,超过这个时间报⽂将被丢弃。

为什么握手不能是两次?

为了防止服务器端开启一些无用的连接增加服务器开销
防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

  • 总结就是防止开启一些“异常端口”浪费,所谓异常就是,比如服务端返回的ack没有收到,客户端需要超时重连,这段时间服务端的端口白白占用了,或者恶意人员开了很多半连接的端口,浪费了端口。

什么是半连接队列?
面试-快速学习计算机网络-UDP/TCP,面试之快速学习计算机网络,面试,学习,计算机网络

6. TCP的可靠性

TCP主要提供了

  • 检验和
  • 序列号/确认应答
  • 超时重传
  • 最大消息长度
  • 滑动窗口控制

等方法实现了可靠性传输。但是总结其实还是校验和 序列号/确认应答

7. 什么是TCP粘包和拆包?

  1. TCP 是面向流,没有界限的一串数据。TCP 底层并不了解上层业务数据的具体含义,它会根据 TCP 缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被 TCP 拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的 TCP 粘包和拆包问题
  2. 要发送的数据小于 TCP 发送缓冲区的大小,TCP 将多次写入缓冲区的数据一次发送出去,将会发生粘包。
  3. 要发送的数据大于 TCP 发送缓冲区剩余空间大小,将会发生拆包
  4. 待发送数据大于 MSS(最大报文长度),TCP 在传输前将进行拆包。即 TCP 报文长度 - TCP 头部长度 > MSS

那怎么解决呢?文章来源地址https://www.toymoban.com/news/detail-663722.html

  • 发送端将每个数据包封装为固定长度
  • 在数据尾部增加特殊字符进行分割
  • 将数据分为两部分,一部分是头部,一部分是内容体其中头部结构大小固定,且有一个字段声明内容体的大小。

到了这里,关于面试-快速学习计算机网络-UDP/TCP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机网络】UDP报文详解

    目录 一. UDP协议概述 二. UDP报文格式 1. 首部 2. 校验和 三. UDP的缓冲区 结束语 UDP—— 用户数据报协议 ,是传输层的一个重要协议 基于UDP的应用层协议有: DNS,TFTP,SNMP,NTP 协议 全称 默认端口号 DNS Domain Name Service(域名服务) 53 TFTP Trivial File Transfer Protocol(简单文件传输协议

    2024年01月16日
    浏览(40)
  • 【计算机网络篇】UDP协议

    ✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的、不可靠的数据传输服务。 UDP 提供了不面向连接的通信,且不对传送的数据报进行可靠的保证,

    2024年02月12日
    浏览(41)
  • 【计算机网络】UDP协议详解

    目录 前言       端口号的拓展 端口号范围划分 netstat pidof UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议     我们前面讲完了 http和https协议 ,它们都属于 应用层 ,按照TCP/IP五层模型,我们下一层该讲解 传输层 了。传输层又

    2024年02月09日
    浏览(69)
  • 【计算机网络 】传输层——UDP

    在学习HTTP等应用层协议时,为了便于理解,可以简单的认为HTTP协议是将请求和响应直接发送到了网络当中。但实际应用层需要先将数据交给传输层,由传输层对数据做进一步处理后再将数据继续向下进行交付,该过程贯穿整个网络协议栈,最终才能将数据发送到网络当中。

    2024年02月06日
    浏览(63)
  • 计算机网络(2) --- 网络套接字UDP

    计算机网络(1) --- 网络介绍_哈里沃克的博客-CSDN博客 https://blog.csdn.net/m0_63488627/article/details/131967378?spm=1001.2014.3001.5501 目录 1.端口号 2.TCP与UDP协议 1.TCP协议介绍 1.TCP协议 2.UDP协议 3.理解 2.网络字节序 发送逻辑 3.socket 1.介绍 2.sockaddr结构 4.UDP协议编程 1.接口介绍 1.创建套接字

    2024年02月14日
    浏览(49)
  • 【计算机网络】UDP/TCP 协议

    端口号(Port)标识了一个主机上进行通信的不同的应用程序。在 TCP/IP 协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看)。 0 - 1023: 知名端口号,HTTP, FTP, SSH 等这些广为使用的应用层协议,它们的

    2024年03月14日
    浏览(63)
  • 【计算机网络】UDP/TCP协议

    我们先来看一张图; 在研究UDP前我们先来回答两个问题: 有效载荷如何与报头分离? 如何将有效载荷交付? 第一个问题由于在报头里面有16位UDP长度(表示的是有效载荷+报头长度),而报头长度8字节是固定的,所以分离时我们只需要用整个报文的大小减去固定的8字节报头数据即

    2024年02月08日
    浏览(66)
  • 【计算机网络】传输层协议 -- UDP协议

    传输层是计算机网络中的一个重要层次,位于网络层和应用层之间,它的主要功能是为应用层提供端到端的数据传输服务,负责确保数据可靠传输、流浪控制和拥塞控制等。 传输层的两个主要协议是传输控制协议(TCP)和用户数据报协议(UDP)。它们各自有不同的特点和用途

    2024年02月15日
    浏览(75)
  • [计算机网络] 实验3 UDP协议分析

    实验目的 掌握运输层 UDP 协议内容 理解 UDP 协议的工作原理 了解应用层和运输层协议的关系 实验内容 1.DNS查询UDP数据分析 要求 : 使用 t c p d u m p tcpdump t c p d u m p 抓取 D N S DNS D N S 查询网络通信数据包,利用 w i r e s h a r k wireshark w i r e s h a r k 分析 U D P UDP U D P 数据 例如 : d i

    2023年04月26日
    浏览(48)
  • 计算机网络——18无连接传输UDP

    “尽力而为的”服务,报文段可能 丢失 送到应用进程的报文段乱序 无连接 UDP发送端和接收端之间没有握手 每个UDP报文段都被独立的处理 UDP被用于 流媒体 DNS SNMP 在UDP上实现可靠传输 在应用层增加可靠性 应用特定的差错格式 为什么要有UDP 不建立连接(会增加延时) 简单:

    2024年02月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包