计算机网络7:传输层相关

news2024/9/24 8:23:21

目录

  • 1-传输层
    • 1.1 UDP 和 TCP 的特点
      • 1.1.1 UDP用户数据报格式
      • 1.1.2 TCP首部格式
        • 1.1.2.1 常用端口号
    • 1.2 TCP的三次握手
      • 1.2.1 三次握手的原因
    • 1.3 TCP四次挥手
      • 1.3.1 四次挥手的原因
      • 1.3.2 TIME_WAIT为什么是2MSL
    • 1.4 TCP的可靠传输有效机制
      • 1.4.1 TCP可靠传输-超时重传
      • 1.4.2 TCP流量控制
      • 1.4.3 TCP拥塞控制
        • 1.4.3.1 怎么进行拥塞控制
          • 1.慢开始
          • 2.拥塞避免
          • 3.快重传
          • 4.快恢复
      • 1.4.4确认应答机制
      • 1.4.5 延迟应答
    • 1.5TCP和UDP的区别
    • 1.6 基于TCP和UDP的应用层协议
      • 1.6.1 TCP
      • 1.6.2 UDP
    • 1.8 用UDP实现可靠传输

1-传输层

网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信, 传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑 通信信道。

1.1 UDP 和 TCP 的特点

  1. 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽大可能交付,没有拥塞控制,面向报文 (对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多 的交互通信。

  2. 传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控 制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据 块),每一条 TCP 连接只能是点对点的(一对一)。

1.1.1 UDP用户数据报格式

1.1.2 TCP首部格式


1.1.2.1 常用端口号

  1. 0-1023:知名端口号,HTTP\FTP\SSH等应用层端口都是固定的

  2. 1024-65535:客户端程序端口号,操作系统动态分配的端口号

  3. 知名端口号:

    ssh服务器–22

    ftp服务器–21

    teInet服务器–23

    http服务器—80

    https服务器–443

1.2 TCP的三次握手

  • 一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。

  • 然后客户端主动发起连接 SYN,之后处于 SYN-SENT 状态。

  • 服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN,之后处于 SYN-RCVD 状态。

  • 客户端收到服务端发送的 SYN 和 ACK 之后,发送 SYN 的 ACK,之后处于 ESTABLISHED 状态,因为它一发一收成功了。

  • 服务端收到 ACK 的 ACK 之后,处于 ESTABLISHED 状态,因为它也一发一收了。

1.2.1 三次握手的原因

·1第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待 一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求后还是会到达服务器,如果不进行三次握 手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确 认,不进行第三次握手,因此就不会再次打开连接。

2.保证双方的序号是同步的,这是TCP可靠传输的重要原因

每一个SYN都要有对应的ACK,确保双方都具有发送和接收数据的功能

3.防止资源浪费

1.3 TCP四次挥手

  • 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。

  • 服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状态。

  • 客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态。

  • 等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。

  • 客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态

  • 服务器收到了 ACK 应答报文后,就进入了 CLOSE 状态,至此服务端已经完成连接的关闭。

  • 客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此客户端也完成连接的关闭。

1.3.1 四次挥手的原因

客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服 务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

1.3.2 TIME_WAIT为什么是2MSL

客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器 设置的时间 2MSL。这么做有两个理由:2MSL怎么来的
(1)确保后一个确认报文ACK能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文, A 等待一段时间就是为了处理这种情况的发生。

(2)等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧 的连接请求报文。

MSL 是 Maximum Segment Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。因为 TCP 报文基于是 IP 协议的
而 IP 头中有一个 TTL 字段,是 IP 数据报可以经过的最大路由数,每经过一个处理他的路由器此值就减 1,当此值为 0 则数据报将被丢弃,同时发送 ICMP 报文通知源主机。
MSL 与 TTL 的区别:MSL 的单位是时间,而 TTL 是经过路由跳数。所以 MSL 应该要大于等于 TTL 消耗为 0 的时间,以确保报文已被自然消亡。

TIME_WAIT 等待 2 倍的 MSL,比较合理的解释是
网络中可能存在来自发送方的数据包,当这些发送方的数据包被接收方处理后又会向对方发送响应,所以一来一回需要等待 2 倍的时间。

1.4 TCP的可靠传输有效机制

是什么?为什么?怎么做

超时重传、滑动窗口、流量控制、拥塞控制

(1)确认和重传机制:建立连接、发送包时的确认,运输过程中校验失败、丢包或延时发送端重传

(2)数据排序:把数据分成很多包,按顺序进行传输

(3) 流量控制:滑动窗口和计时器

(4)拥塞控制:慢启动、拥塞避免、快速重传、快速恢复

1.4.1 TCP可靠传输-超时重传

如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文 段。

1.4.2 TCP流量控制

流量控制是为了控制发送方发送速率,保证接收方来得及接收,作用于接收方,防止分组丢失的。

接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

1.4.3 TCP拥塞控制

  1. 作用于网络,防止过多的数据注入到网络中,避免出现网络负载过大的情况。

  2. 拥塞:对网络中某一资源的需求超过了该资源所能提供的可用部分,影响到网络性能

1.4.3.1 怎么进行拥塞控制

拥塞窗口

发送数据端使用的窗口大小,拥塞窗口不代表缓存,拥塞窗口指某一源端数据流在一个RTT内可以最多发送的数据包数。

1.慢开始

当主机开始发送数据时,如果立即将大量数据字节注入到网络,那么就有可能因为不清楚当前网络的负荷情况而引起网络阻塞。所以,最好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚发送报文段时,先把拥塞窗口cwnd设置为 1 个最大报文段MSS的数值。而在每收到一个新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值(1个确认报文对应2个MSS,即:呈指数增长)。用这样的方法逐步增大发送方的拥塞窗口cwnd,可以使分组注入到网络的速率更加合理。

注意:慢开始当中的“慢”并不是指cwnd的增长速率慢,而是在TCP开始发送报文段时先设置cwnd = 1,使得发送方在开始时只发送一个报文段。

2.拥塞避免

让拥塞窗口cwnd缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd + 1,而不是加倍,即:呈线性增长。这样拥塞窗口cwnd按线性规律缓慢的增长,比慢开始算法的拥塞窗口增长速率缓慢的多。

3.快重传

所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。

  • 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;
  • 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
    发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。
  • 对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为1)。使用快重传可以使整个网络的吞吐量提高约20%。
4.快恢复

发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法;发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法。
(阈值ssthresh的作用是:当下一次出现超时,慢启动到阈值后开始启动拥塞避免。)

1.4.4确认应答机制

给每个字节都进行编号,即序列号 。每个ACK都有对应的确认序列号,告诉发送者,已经收到哪些数据,下一次从哪里开始

因为有序列号还可以进行因重传机制可能导致的重复包的问题

1.4.5 延迟应答

一般每隔2个包,应答一次,延迟应答时间不超过超时时间,一般是200ms

1.5TCP和UDP的区别

1. 连接

TCP 是面向连接的传输层协议,传输数据前先要建立连接。一个发送一个接收,数据传输前需要先握手

UDP 是不需要连接,即刻传输数据。

2. 服务对象

TCP 是一对一的两点服务,即一条连接只有两个端点。

UDP 支持一对一、一对多、多对多的交互通信

**3. 可靠性
**
TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。

UDP 是尽最大努力交付,不保证可靠交付数据。

4. 拥塞控制、流量控制

TCP 有拥塞控制和流量控制机制(发送方不会淹没接收方),保证数据传输的安全性。有收发缓冲区

UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率,尽可能快的传输。没有发送缓冲区

5. 首部开销

TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。

UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

1.6 基于TCP和UDP的应用层协议

1.6.1 TCP

HTTP、HTTPS、FTP、SMTP、自己写TCP程序时自定义应用层协议

1.6.2 UDP

DNS、DHCP动态主机配置协议

1.8 用UDP实现可靠传输

解答:如果物理层,数据链路层或网络层能提供可靠性的话,那么UDP就可以利用下面各层的可靠性实现自己的可靠性;然鹅,UDP是不可靠的,也就是说他之下的各层并不能保证可靠性,所以只能靠上面的应用层(加上ACK等重传机制)来保证可靠性

参考:
1.https://blog.csdn.net/yy2017220302028/article/details/104631286
2.公众号 小林coding

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

封装、继承、Super、重写、多态instanceof类型转换的使用以及个人见解

这里写目录标题封装继承supersuper和this的区别重写多态instanceof类型转换封装 之前我们调用共有的属性,是直接可以调用的 但是属性私有后,无法在直接.调用 只能通过getset调用 继承 super 可以直接调用父类中属性和方法,私有的无法做 其…

TCP详解及面试相关问题

文章目录1、计算机模型2、客户端和服务端通信——TCP协议(1)socket套接字(2)TCP三次握手——创建socket(3)连接的本质(4)TCP四次挥手——释放socket资源(5)TC…

如何用PHP实现消息推送

什么是消息推送 通过服务器自动推送消息到客户端(浏览器,APP,微信)的应用技术。 2. 为什么要使用消息推送技术 通常情况下都是用户发送请求浏览器显示用户需要的信息。推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间。它根据…

SSH 服务详解 (八)-- vscode 通过 SSH 远程连接 linux 服务器

vscode 通过 SSH 远程连接 linux 服务器 SSH服务详解(一)–Linux SSH 服务器与客户端的安装与启动 SSH服务详解(二)–使用私钥登录 SSH 服务器(免密登录) SSH 服务详解 (三)-- 使用 SSH 代理 SSH 服务详解 (四)-- 本地调用远程主机的命令 SSH 服务详解 (五)-- 远程文件拷贝…

零信任-微软零信任介绍(2)

微软零信任是什么? Microsoft Zero Trust 是一种安全架构,旨在在没有信任任何设备、用户或网络的情况下保护网络。这种架构使用多重验证和分段技术,以确保每个请求和资源的安全性。 零信任不假定任何内部用户或设备是安全的&#xff…

硬件工程师入门基础知识(一)基础元器件认识(一)

硬件工程师入门基础知识 (一)基础元器件认识(一) 今天水一篇hhh。介绍点基础但是实用的东西。 tips:学习资料和数据来自《硬件工程师炼成之路》、百度百科、网上资料。 1.贴片电阻 2.电容 3.电感 4.磁珠 1.贴片电…

Android 基础知识4-2.4程序签名打包

Android APP都需要我们用一个证书对应用进行数字签名,不然的话是无法安装到Android手机上的,平时我们调试运行时到手机上时,是AS会自动用默认的密钥和证书来进行签名;但是我们实际发布编译时,则不会自动签名&#xff0…

IDEA设置只格式化本次迭代变更的代码

趁着上海梅雨季节,周末狠狠更新一下。平常工作在CR的时候,经常发现会有新同事出现大量代码变更行..一看原因竟是在格式化代码时把历史代码也格式化掉了这样不仅坑了自己(覆盖率问题等),也可能会影响原始代码责任到人&a…

python 字典的概念叙述和使用方法

文章目录1. 一个简单的字典2. 使用字典2.1 访问字典中的值2.2 添加键-值对2.3 修改字典中的值2.4 删除键-值对3. 遍历字典3.1 遍历所有键-值对3.2 遍历字典中的所有键3.3 按顺序遍历字典中的所有键3.4 遍历字典中的所有值4.嵌套4.1 字典列表4.2 range() 函数4.3 在字典中存储列…

Java中导入、导出Excel——HSSFWorkbook 使用

一、介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统、银行系统)。或者是:我们已经习惯用Excel打印。这样在我们实际的开发中,很多时候需要…

自动化测试岗位求职简历编写规范+注意事项,让你的简历脱颖而出

目录 前言 1.个人信息 2.教育背景(写最高学历) 3.个人技能(按精通/掌握/熟练/了解层次来写) 4.工作经历 5.工作经验/项目经历 6.自我评价 总结 前言 挑选一个阅读舒适度不错的模板 HR和面试官看的简历多,都是快速阅读,舒适度特别重要&#xff1b…

ctfshow 每周大挑战 极限命令执行

《简单的命令执行题目》 这里感叹一下,g4佬是真好厉害,这次题目十分的难,嗯,对我这种菜鸡来说是这样的,想了一天,最后结束了,也还是没有想明白第五题的解法,我真是fw,到最…

Oracle Trace File Analyzer 介绍及简单使用

一、什么是Oracle Trace File Analyzer Oracle Autonomous Health Framework(AHF) 包含 Oracle ORAchk, Oracle EXAchk, and Oracle Trace File Analyzer(TFA). AHF工具包包含了Oracle常用的多种诊断工具,如 ORAchk, Oracle EXAchk, and Oracle Trace File Analyzer…

简单的密码加密

用户的密码必须被加密后再存储到数据库, 否则就存在用户账号安全问题用户使用的原始密码通常称之为"原文"或"明文", 经过算法的运算, 得到的结果通常称之为"密文"在处理密码加密时, 不可以使用任何加密算法, 因为所有加密算法都是可以被逆向运算…

内网渗透(十九)之Windows协议认证和密码抓取-网络认证(基于挑战响应认证的NTLM协议)

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

尚医通(十一)医院模拟系统接口

目录一、第三方医院系统简介及运行二、上传医院接口1、数据分析2、添加service接口3、添加repository接口4、添加controller接口5、添加帮助类6、图片base64说明7、base64码通过http传输问题三、查询医院接口1、添加service方法2、添加controller四、上传科室接口1、添加科室基…

C语言学习笔记(二): 简单的C程序设计

数据的表现形式 常量 在C语言中常量有以下几种: 整型常量: 0,-1,100实型常量: 小数形式(12.12);指数形式(12.1e312.110312.1\times 10^312.1103)字符常量: 普通字符(’a’,’Z’,’#’);转义字符(’\n’…

nacos 集群搭建

1、单节点nacos搭建 ------------------------> 跳转单节点搭建 2、nacos 集群 搭建 请注意本次演示在win上进行,在linux 或 k8s,过程类似 2.1 将nacos,copy成三份 2.2 修改nacos配置信息 如下图,需要修改两个配置文件&am…

ansible的部署与命令模块

目录 一、ansible的概述 1、ansible简介 2、ansible特点 3、官方网站 4、ansible的模块组成 5、ansible的工作机制 二、ansible部署 1、ansible的安装 三、ansible的命令行模块 1、command模块 2、shell模块 3、cron模块 4、user模块 5、group模块 6、copy模块 7…

千锋教育+计算机四级网络-计算机网络学习-03

目录 UDP编程准备 字节序概述 如何判断自己主机上的大小端方式 大小端重点 大小端所需函数 htonl函数 ntohl函数 htons函数 ntohs函数 地址转换函数 inet_pton函数 inet_ntop函数 UDP编程准备 字节序概述 字节序概念 是指多字节数据的存储顺序,一个字节是…