当前位置: 首页 > news >正文

计算机网络第五章--传输层

image-20220815214218295

一、传输层提供的服务

1.传输层

image-20220821203432929

中间的网络设备最多只能到网络层

进程和进程之间的逻辑通信 —— 表面上是两个主机的进程之间在通信。但实际是把数据从上层进行步步封装传给物理层,物理层放到链路上传输,到对端再至下而上把数据解封装交付给上层

复用发送方不同的应用进程可以使用同一个传输层协议来传输数据   传输层--->网络层

分用接收方在传输层去掉报文首部后能够把数据送交给正确的进程   网络层--->传输层

网络层的首部校验和只校验IP数据报头部没有校验数据部分,需要高层实现对数据的检错。网络层的数据部分就是传输层的报文段,因此传输层如果对报文进行差错检测,那网络层就不需要再对报文进行差错检测。网络层+传输层可以实现可靠传输

传输层并不一定会实现可靠传输(UDP)

2.传输层的两个协议

image-20220821204900949

方便起见可将两个协议的传输单元都称为报文段

QQ发送一条消息即使用UDP协议

3.传输层寻址与端口

如果要发送数据给一台主机,在网络当中根据其IP地址寻找到它所在的网络,进入它所在的网络后再根据MAC地址再定位到具体的主机。找到主机后还应根据端口交付给具体的应用进程

端口:逻辑端口/软件端口,是传输层的SAP,标识主机中的应用进程

路由器和交换机上那种可以直接插拔的端口叫做硬件端口。而传输层的端口是看不见摸不着的,所以叫软件端口

端口号来标识端口,端口号只有本地意义,在因特网中不同计算机的相同端口没有联系

端口号长度为16bit,可以表示2^16 = 65536个不同的端口号

image-20220821210557750

客户端使用的端口号只有在使用时才会由操作系统随机分配,进程结束就会端口号被回收

一些常用的端口号:

image-20220815214311155

在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程。

套接字Socket= (主机IP地址, 端口号)

二、UDP协议

1.用户数据报协议UDP概述

UDP只在IP数据报服务之上增加了很少功能,即复用分用和差错检测功能

注意!!!!!!!!!!!!!!!!!!:

UDP的主要特点:

  1. UDP是无连接的,减少开销和发送数据之前的时延

  2. UDP使用最大努力交付,即不保证可靠交付,可靠性由UDP上层即应用层保证

  3. UDP是面向报文的,适合一次性传输少量数据的网络应用

    image-20220815214322904

    因此应用程序需要选择大小合适的报文,报文太长则网络层需要分片以满足链路层MTU的要求,这样就会降低网络层的效率

  4. UDP无拥塞控制,适合实时应用(比如IP电话、视频会议)

  5. UDP首部开销小,只有8BTCP20B

2.UDP首部格式

image-20220815214332362

一定会有首部字段,数据字段可以为0

16位源端口号可有可无。如果期望收到对方的回复则添上,如果不需要就可以是全0。目的端口号一定要有

16位UDP长度单位是1B

3.UDP校验

image-20220815214344022

17就是IP数据报首部的协议字段,这个协议字段说明IP数据报数据部分使用什么协议,这里数据部分使用UDP协议,对应的协议字段值是17

image-20220821231310346

三、TCP协议

1.TCP协议特点和TCP报文段

1)TCP主要特点

  1. TCP是面向连接(虚连接)的传输层协议

    虚连接 —— 并不是实际的物理连接,只是使用时就好像两个进程之间直接建立了点对点的连接。实际上连接过程是把数据报加上各个层次的首部之后放到链路上传输,然后在接收端进行步步解封装,这是一个完整的物理连接

  2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点

    TCP协议不能用于广播和多播通信方式

  3. 提供可靠交付的服务,无差错、不丢失、不重复、按序到达。可靠有序,不丢不重

  4. 提供全双工通信

    发送方和接收方角色不定,双方可以同时发送数据也可以同时接收数据

    TCP协议连接的两端都会设置发送缓存,接收缓存

    发送缓存:应用层准备发送的数据&已发送但尚未收到确认的数据

    接收缓存:按序到达但尚未被应用程序读取的数据&不按序到达的数据

  5. TCP面向字节流

    流:流入到进程或从进程流出的字节序列

    虽然进程和TCP交互时一次发送一个数据块,数据块可能大小不一样,但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流

    image-20220815214405549

    发送方发送文件时会把文件按照字节排序编号并放入TCP缓存,再取几个字节加上TCP头形成TCP报文段再放到链路上传输

  6. 传输单位是报文段

 

2)TCP报文段首部格式

image-20220815214414774

image-20220815214423770

以上图为例发送”123“报文段时,该报文段首部序号字段填1

image-20220822002830429

接收端已经收到了”123“报文段就会给发送端发送首部确认号字段为4的报文段

由数据偏移字段可知首部最大为60B

image-20220822003347217

将RST置为1还可以用来拒绝一个非法报文段,或者拒绝打开一个链接

image-20220822100012476

发送方根据接收方报文的窗口字段设置发送窗口大小

检验时加上的伪首部的第四个字段其实就是协议字段,在UDP当中是17,而在TCP当中应该是6

紧急指针指出紧急数据的末位在报文段当中的位置。如紧急指针值为50,则TCP数据部分的前50个字节均为紧急数据,剩下的为普通数据

image-20220815214509133

MSS指的是每一个TCP报文段当中数据字段的最大长度

填充字段保证首部是4B整数倍,通常填充全0字段

2.TCP连接管理

1)TCP连接管理

TCP连接传输分为三个阶段:

image-20220815214518622

TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。

2)TCP的连接建立

注意:!!!!!!!!!!!!!!!!!!!!!!!!!!!!:

image-20220822101501656

Round1 ACK=0,ack无效,同步序列编号SYN=1,生成初始序列好seq=x

Round2 由于连接请求报文段没有数据部分,ack=x+1(表示希望下次接收到的序列号seq=x+1),同时确认号ACK=1SYN=1,生成服务器的序列号seq=y

Round3 SYN只在请求连接和连接接受时置1,所以SYN=0,同时对应seq=x+1ack=y+1此阶段可以携带数据!!

又叫三次握手。 

3)SYN洪泛攻击

image-20220815214548655

解决方案:SYN cookie

4)TCP的连接释放

image-20220822102856183

Round1 由于TCP为全双工,此客户端也有可能为之前的服务端。由于连接释放报文段通常没有数据,所以序号u也可以标识报文段(seq=u),同时终止位FIN=1

Round2 服务器端回一个确认报文段,ACK=1seq=vack=u+1。此时服务器端仍可以发送数据。

Round3 当服务器发送完数据,就释放报文段,主动关闭TCP连接。FIN=1ACK=1seq=wack=u+1

Round4 如果客户端发送的确认报文段没有到达服务器端,服务器端会重传连接释放报文段,客户端在2MSL内收到就会重传确认报文段并重新启动2MSL计时器。如果客户端不等待2MSL的时间而是在发送完确认报文段后直接释放连接,报文段丢失时客户端就无法接收服务器端重传的连接释放报文段,服务器端会一直发连接释放报文段而无法正常关闭。ACK=1,seq=u+1,ack=w+1

又称四次挥手。 

3.TCP可靠传输

TCP可靠传输

image-20220831220541002

1)序号

TCP的首部的序号字段。TCP协议面向字节流,因此TCP传输时以字节为单位,对字节依次编号。实际发送会把多个字节放在一起组成报文段发送,报文段大小不定,取决于链路层MTU。

对于文件或者要发送的数据,第一个字节的序号可以是随机的

image-20220815214639597

2)确认

image-20220815214650296

TCP首部的确认号是期望接收到对方下一个报文的数据的第一个字节的序号。(ACK)

发送方在收到对发送报文段的确认之前,TCP缓存区应保留报文段。

接收方此时收到了“123”报文段,就会发送一个首部确认号字段为4的确认报文段,在发送方收到后把TCP缓存中的“123”报文段删去

接收方可在合适时候发送确认报文段,也可在要发送数据时把确认信息捎带上,即捎带确认

接收方采用累积确认,只确认数据流当中至第一个丢失字节为止的字节

假如发送端此时发送了“456”和“78”两个报文段,但接收端只接收到了“78”报文段,接收端还是会一直发送确认号为4的报文段。在收到确认号为4的报文后,发送端会重传”456“报文段。在接收端收到”456“报文段后,下次发送的确认号应为9。

3)重传

image-20220822123207691

image-20220822123227486

TCP协议也有发送窗口和接收窗口的概念,在发送过程中会使用GBN协议和SR协议,使用时同链路层讲过的大同小异

4.TCP流量控制

1)TCP流量控制

image-20220822151500294

希望对方发送不要过快。利用滑动窗口机制。要求发送方有个接收窗口rwnd

image-20220815214732683

5.TCP拥塞控制

1)TCP拥塞控制

image-20220822152007225

拥塞控制是全局性问题,接收方并不知道拥塞情况具体是哪几台主机发送数据过多造成的。而流量控制是点到点之间的问题,接收方知道找哪个发送方。

拥塞控制四种算法

image-20220822153020564

2)慢开始和拥塞避免

注意!!!!!!!!!!!!!!!!!!!!:

image-20220822154820577

cwnd=n表示为n个报文段,长度都为MSS

慢开始cwnd翻倍在收到之前发送报文的确认后立刻发生

首先慢开始拥塞窗口指数增长 ,当到慢开始门限ssthresh时,此时变为拥塞避免,拥塞窗口为线性增长,当出现网络超时,将ssthresh变为网络拥塞时拥塞窗口的一半,重新执行慢开始,直至遇到新的门限值,在拥塞避免。

3)快重传和快恢复

image-20220822154738033

快恢复:发送方尽快的进行重传,而不等超时计时器超时在重传。要求接收方不要等待自己发送数据时才进行捎带确认,而是立即发哦是那个确认。

首先还是慢开始和拥塞避免,当网络拥塞时,发送方接收到三个重复的确认执行快重传,接着将拥塞窗口变为一半,执行快恢复。 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 带你0到1之QT编程:十、一举击破开发中常用的Button按钮组
  • Redis 缓存淘汰算法策略详解
  • python制作石头剪刀布
  • 气压测试实验(用IIC)
  • 【题解】CF1993D
  • 喧嚣漫天之际,重新审视以太坊的定位与路线图
  • 力扣移除元素(力扣题26)(插空找空位java)
  • 在虚拟机安装mysql数据库
  • 测试工程师学历路径:从功能测试到测试开发
  • selenium元素定位:元素点击交互异常解决方法
  • 计算机网络 --- 【1】欢迎来到计算机网络/计算机网络基本概念/计算机网络、互连网、互联网的区别
  • Vue的slot插槽(默认插槽、具名插槽、作用域插槽)
  • 微服务中间件之Nacos
  • JAVA 的excel数据批量导入解析 现在都用什么API工具 Apache POI 、EasyExcel 、easypoi有什么区别
  • java设计模式 桥接模式
  • golang 发送GET和POST示例
  • HomeBrew常规使用教程
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • JAVA多线程机制解析-volatilesynchronized
  • js中forEach回调同异步问题
  • 阿里云前端周刊 - 第 26 期
  • 大型网站性能监测、分析与优化常见问题QA
  • 简单基于spring的redis配置(单机和集群模式)
  • 驱动程序原理
  • 通过npm或yarn自动生成vue组件
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #if等命令的学习
  • (2)(2.10) LTM telemetry
  • (done) 两个矩阵 “相似” 是什么意思?
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)计算机毕业设计高校学生选课系统
  • (十一)c52学习之旅-动态数码管
  • (四)JPA - JQPL 实现增删改查
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (杂交版)植物大战僵尸
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)Unity3DUnity3D在android下调试
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .net生成的类,跨工程调用显示注释
  • @EnableConfigurationProperties注解使用
  • @staticmethod和@classmethod的作用与区别
  • @Transactional 参数详解
  • [@Controller]4 详解@ModelAttribute
  • [7] CUDA之常量内存与纹理内存
  • [AIGC] 广度优先搜索(Breadth-First Search,BFS)详解
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [C#]使用OpenCvSharp图像滤波中值滤波均值滤波高通滤波双边滤波锐化滤波自定义滤波
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
  • [C++]入门基础(1)
  • [cb]UIGrid+UIStretch的自适应