传输层:负责应用之间的数据传输(通过端口的描述 - -描述哪两个进程在进行通信)- -UDP/TCP
UDP:无连接,不可靠,面向数据报
  udp协议格式:

特性解析:
 无连接:不需要建立连接,只要知道对方的地址信息就能直接发送数据
 不可靠:udp在传输层不保证数据安全有序的到达对端- - -需要程序员在应用层进行包序管理
 面向数据报:有最大长度限制的传输方式- - -取决于数据报长度字段,因为长度字段只有16位,因此数据报总长度不能大于64k,因此若要传输的数据比较大,则需要程序员在应用层进行分包操作,并且进行包序管理
 udp通信在报头中确定了数据报长度,因此udp的数据传输时整条收发的
  发送:sendto给与的数据放到发送缓冲区后就会直接封装头部,进行发送
  接收:recvfrom总是只能接受一条完整的数据,而不会出现接收半条或者多条的情况
因此recvfrom给与的缓冲区一定要足够打,若给与的缓冲区大小小于一条数据的长度,则recvfrom就会报错(udp无法交付半条数据)
TCP:面向连接, 可靠传输, 面向字节流
 tcp协议格式:

面向连接:连接建立成功之后才能进行数据通信- - -tcp有自己的连接管理- - 三次握手建立连接/四次挥手断开连接

1.为什么握手是三次?而挥手是四次?

 ①.握手2次不安全,4次没必要
 tcp通信需要确保双方都具有数据收发 的能力,因此双发都要发送SYN确保 对方具有通信能力
 ②.为什么挥手是四次而不是三次:发送FIN包,只能表示对方不再发送数据,不表示对方不再接收数据,因此被动关闭方进行ACK回复之后可能还会继续发送数据,等到不再发送数据了,才会发送下一个FIN包,因此FIN和ACK是分开的

2.TIME_WAIT状态有什么用?

 假设主动关闭方最后一次ACK丢失,被动关闭方没有收到最后一次ACK,超时就会重传FIN
 假设客户端没有TIME_WAIT就直接释放资源,就有可能启动新客户端与之前客户端相同地址信息
  ①.刚启动的新的客户端绑定地址成功,收到重传的FIN包,对新连接造成影响
  ②.新启动的客户端,若是向相同的服务端发送SYN请求,因为服务端处于LAST_ACK而不是SYN,因此就会发送RST
因此若主动关闭方最后一次回复后直接释放资源,就有可能会对新启动的新连接造成影响,因此等待一段时间,能够处理重传的FIN包,
等待的时间一般为:2个MSL时间   MSL:报文最大生存周期

3.tcp三次握手失败,服务端如何处理?

 ①.没有收到SYN,什么都不做  ②.回复了SYN+ACK,长时间没有响应,则超时后发送RST重置连接报文,释放资源

4.一台主机上出现大量的TIME_WAIT是什么原因?如何处理?

TIME_WAIT是主动关闭方出现的,一台主机出现大量的TIME_WAIT证明这台主机大量的主动关闭连接,常见于一些爬虫服务器
调整TIME_WAIT等待时间,也可以使用开启地址重用的套接字选项

5.一台主机上出现大量的CLOSE_WAIT是什么原因? 如何处理?

CLOSE_WAIT是被动关闭方收到FIN请求后进行回复的状态,等待上层程序进行进一步处理,若出现大量CLOSE_WAIT,有可能是被动关闭方主机上忘了最后一步断开连接后调用close释放资源

TCP连接管理中的保活机制:
 tcp通信中,若两端长时间没有数据往来,则这时候每隔一段时间,服务端向客户端发送一个保活探测数据报,要求客户端进行回复,若连接多次没有收到响应,则认为断开连接

长时间没有数据来往:默认7200s----通过设置套接字选项配置
每隔一段时间:默认75s
连续多次无响应:默认9次
可靠传输:
1.面向连接
2.确认应答机制- - 发送数据后要求对方进行确认回复,才知道对方是否收到了这条数据,通过序号和确认序号实现
3.超时重传机制- - 发送数据等待确认响应时间之后,则认为数据丢失,则进行重新传输
4.通过序号/确认序号字段实现数据有序传输
5.通过校验和字段检验数据一致性,不一致则要求对方进行重新传输

seq:本条数据起始序号。
ack:对对方发送数据的确认序号,搞虚对方确认序号之前的数据我收到了

三次握手时,双方会协商起始序列号(例子从0开始,实际中不一定,是一个随机值),三次握手中,虽然数据长度为0,但是确认序列号是对方发送的数据起始号+1

数据通信时,确认序号是对方发送的数据中的起始序号加上数据长度,告诉对方这个确认序号之前的数据都已经收到了

数据连续发送时,第一条数据丢失,接收方直接收到第二条和第三条,接收方就不会对第二条和第三条进行回复,因为确认序号确认的是这个数据之前的数据全部都已经收到了,这么做的目的,防止因为确认回复的丢失而导致的重传,就算因为网络原因,后发的数据先到了,接收方也会根据协商的起始序号,根据每条数据中的起始序号,将数据在接收缓冲区中进行排序

额外的丢包问题处理:
 1.发送方发送的数据过快,接受方来不及取出处理,接收缓冲区满溢,则以后的数据都会被丢弃
 2.发送方发送大量数据,但是因为网络状态不好导致大量丢包重传
滑动窗口机制:依靠协议中的窗口大小字段实现流量控制
 接收方通过协议中的窗口大小字段,告诉发送方最多可以发送多少数据(窗口大小不大于接收方的接收缓冲区剩余空间大小)
 MSS:最大数据段大小,表示tcp数据通信时一条数据的最大大小,通信时双方进行协商,取双方中MSS较小的一方作为最大数据段大小
滑动窗口在发送方维护发送窗口/接收方维护接收窗口----窗口通过一个后沿序号/前岩序号实现
发送窗口:表示一次最多从后沿到前沿最多发送多少数据----不超过接收方的窗口大小
 后沿:所要发送的数据起始序号,后沿的移动取决于是否收到数据确认回复
 前沿:根据接收方窗口大小计算结束序号,取决于接收方响应的窗口大小(前沿减去后沿大小就等于接收的窗口大小)
接收窗口:表示从哪里开始接收数据,接收到多少序号为止,不超过剩余空间大小,进行包序管理,哪个包应该放在缓冲区的什么为止
 后沿:接收数据的起始序号,后沿的移动取决于是否收到了新数据
 前沿:根据接收缓冲区剩余空间大小计算得到接收的数据的结束序号
滑动窗口机制允许发送端根据窗口大小以及mss连续发送多条数据,一旦丢包:
 停等协议:等到一条回复,然后才能发送下一条数据
 回退n步协议:一条数据丢了,需要发送端将这条数据以后的数据都进行重传
 选择重传协议:一条数据丢了,则仅仅针对丢失的数据进行重传

因为网络状态不好,导致发送的数据越多丢包就越多:拥塞控制
 拥塞控制:进行网络探测,以一种慢启动,快增长的传输方式,进行根据网络状态调整发送速度的机制
提高传输机制的方法:
 快速重传机制:发送端连续发送多条数据,若接收端接收数据并非是接收后沿数据,则认为有可能后沿数据丢失,首先不会进行接收到的数据的确认回复,其次向发送端间隔连续三次后沿数据的重传请求,要求对方对后沿数据进行重传,发送方连续收到三条同一重传请求,则对这条数据进行重传
 延迟应答机制:接收方接收到数据之后,并不立即进行确认回复(因为如果进行确认回复,因为接收缓冲区剩余空间变小了,窗口变小了,导致传输的吞吐量变小了),而是延迟应答,则有可能应答的时候程序在上层以及将数据取出,保证窗口大小不会变
 捎带应答机制:接收方接收到数据之后进行确认回复,确认回复就是一个报头中的确认序号进行的,为了减少空报头的响应占据带宽,使用捎带应答,在即将要发送的数据头部中进行上一条接收的数据的确认回复

面向字节流:字节流传输服务—面向连接的,有序的一种以最小以字节为传输单元的传输方式
 发送端在send发送数据的时候,并不会立即封装报头,而是将数据先放到发送缓冲区中,选择合适的时候再去从缓冲区中取出合适大小的数据进行传输
 接收端在recv接收数据的时候,并非一条一条向上交付,而是根据recv想要的数据长度从接收缓冲区中取出指定长度的数据进行发送
优点:传输比较灵活,大量小的数据集合合成一条大的数据进行一次性传输,减少了IO次数(延迟发送可以关闭,可配置),接收方也比较灵活,想要多少取多少
缺点:tcp交付的这条数据可能并非一条完整的数据,也有可能是多条数据(tcp对于上层给与的数据边界并不敏感,不关注是几条数据,只关注自己可以传输多少字节的数据/recv想要接收多少字节的数据----反之udp对于每条传输的数据都有边界区分,每次刚好只交付一条完整的数据),导致上层将多条数据当作一条数据进行处理
 tcp的粘包问题:tcp有可能将多条数据当作一条数据进行处理(udp不会出现粘包问题,因为udp头部包含了数据报长度)
 tcp粘包的解决方案:程序员在应用层进行数据的边界管理
  1.每条数据之间以特殊字符进行间隔(缺陷:如果数据中有这个特殊字符,就需要转义处理)
  2.数据定长传输(缺陷:数据短小的话就需要进行补位,传输了大量无用的数据)
  3.在应用层协议头部中定义数据长度
  http如何解决粘包问题:http头部以\r\n特殊字符作为间隔表述结束,并且在头部中通过Content
  udp如何解决粘包问题:头部定长8字节,头部中定义数据报长度

计算机网络--传输层相关推荐

  1. 5.3.1计算机网络传输层之TCP可靠传输

    文章目录 0.前言 1.TCP可靠传输简介 2.序号 3.确认 4.重传 0.前言 再看此篇文章之前,得熟悉一下TCP首部报文等知识 计算机网络传输层之TCP协议(tcp协议特点.tcp报文段首部格式 ...

  2. 计算机网络协议的特点,计算机网络传输层协议类型与特点

    我们在上文中给大家简单介绍了计算机网络体系的七层结构,而今天我们就一起来了解一下,计算机网络传输层协议类型与特点. 传输层涉及到两个重要的协议:UDP和TCP,本节我们重点介绍这两个协议. 1.UDP ...

  3. 计算机网络 - 传输层

    一.传输层 为进程提供通用数据传输服务.由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议.运输层包括两种协议:传输控制协议 TCP,提供面向连接.可靠的数据传输服务,数据单位为报 ...

  4. 计算机网络传输层之SR协议

    系列文章目录 第二章计算机网络传输层之可靠数据传输之流水线机制与滑动窗口协议-Selective Repeat协议(SR协议) 计算机网络传输层之SR协议 系列文章目录 九.Selective Rep ...

  5. 计算机网络传输层课件,计算机网络技术,传输层协议课件

    计算机网络技术,传输层协议课件 lufei1108@ 阿迪达斯三条纹标志是由阿迪达斯的创办人阿迪·达斯勒设计的,三条纹的阿迪达斯标志代表山区,指出实现挑战.成就未来和不断达成目标的愿望. 第4章 传输 ...

  6. 自顶向下计算机网络 传输层

    自顶向下计算机网络学习 传输层 一.概述和传输层服务 1.1 传输层提供的服务 1.2传输层和网络层的关系 1.3 传输层协议 可靠的.保序的传输:TCP 不可靠.不保序的传输:UDP 二.多路复用与 ...

  7. 计算机网络 | 传输层的两个重要协议——TCP、UDP

    目录 传输层概述 传输层的作用 运输层端口号.复用与分用的概念 发送方的复用和接收方的分用 UDP和TCP的对比 TCP的流量控制 TCP的拥塞控制 TCP的差错控制 UDP的差错控制的和流控 TCP ...

  8. 计算机网络传输层UDP协议--龙之介计算机网络学习(3)

    概述: 其实计算机网络主要聊的就是因特网五层协议栈的那几种协议,通过对各个协议的构成,了解一个数据包(报文)是如何从网络中完成传输的作用. 这是一个系列的,主要用于自己复习计网. 计算机网络应用层–龙 ...

  9. 计算机网络传输层课件,计算机网络基椽第八章(传输层)(全)ppt培训课件

    计算机网络基椽第八章(传输层)(全)ppt培训课件 (25页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 第八章 传输层,传输层的地位. ...

  10. 计算机网络----传输层

    传输层的作用: IP层提供点到点的连接 传输层提供端到端的连接 TCP Transmission Control Protocol 传输控制协议 可靠的.面向连接的协议 传输效率低 TCP的封装格式 ...

最新文章

  1. 独家 | 盘点9个适用所有学科的R数据可视化包(附链接)
  2. 学好python能干嘛-学会Python后都能做什么?网友们的回答简直不要太厉害
  3. android恶意代码检测报告,用机器学习检测Android恶意代码
  4. android accessibilityservice自动点击_【Android】无障碍服务(一)入门轻踩
  5. layui左侧菜单接口java实现:替代init.json
  6. java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
  7. javascript学习笔记_function
  8. ASP.NET操作Excel
  9. 全面分析RHCE7(红帽认证工程师)考试题目之 ----NFS文件共享 篇
  10. java累加求和_Java lambda 循环累加求和代码
  11. C语言_报数问题:有n个人围成一圈,顺序从零排号。从第一个人开始报数(从1到3报数),凡报到3的人 退出圈子,问最后留下的是原来第几号的那位。
  12. solidworks做动态静力学分析Motion(牛头刨床为例)机械原理课设(停止中断)
  13. 原神可莉、七七、迪奥娜、早柚、宵宫...模型下载(带骨骼贴图)
  14. 移动端点击事件的延迟
  15. [CodeForces757E]Bash Plays with Functions
  16. awtk + scons资源/问题/调试
  17. opencv和pytorch中的warp操作函数:cv2.warpAffine, torch.nn.functional.grid_sample, cv2.warpPerspective
  18. 【王者荣耀】全英雄无水印皮肤下载器
  19. 算法题——判断四边形是否为凸四边形
  20. 红旗linux超级管理员root 密码恢复,修改redflag启动级别

热门文章

  1. 自己动手写推箱子游戏——休闲放松(源码)
  2. Struts2-062_RCE的简单复现(CVE-2021-31805)
  3. 【田渊栋报告】游戏中的人工智能:成就与挑战 | ICML WorkShop(46PPT)
  4. 在Ubuntu 18.04 LTS使用colcon工具编译ROS 1/2包
  5. 深入浅出地理解STM32中的定时器工作原理
  6. Java 网络编程系列之 NIO
  7. python获取自己发的说说内容
  8. 细说Python设计模式之模板方法模式(封装算法)
  9. 微软收购瞄准的雅虎五大重量级人物
  10. 44、电子邮件之一(应用层)