网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)

简介: 网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解(2)

拥塞控制

(滑动窗口)  大小决定   min( 接收窗口决定的 , 拥塞窗口决定  (发送方发送缓冲区大小))


why需要慢开始,最一开始发送方会将发送窗口(拥塞窗口的)设置的很小 ?

 

因为网络环境错综复杂,刚开始不清楚网络环境的好坏, 所以满开始就有点像是派个侦察兵去看看,网络环境咋样,然后再进一步调整拥塞窗口的大小   确定滑动窗口大小..


先探测一下当前的网络拥塞程度,然后由小到大的逐渐增大拥塞窗口的大小.


然后是指数级的扩张滑动窗口大小,但是也不能一直那样扩大下去,于是有一个阈值的概念,超过这个阈值又转变为线性增长了

当TCP开始启动的时候, 慢启动阈值等于窗口最大值


在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回


少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞;


当TCP通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降


其实就是为了保证在不造成网络环境压力太大的情况下尽快将数据传输过去

TCP小结

  • TCP是面向连接的,可靠的,基于字节流的传输层通信协议
  • 如何保证可靠性:

  • 性能提升上面:
  • 1.  采取了滑动窗口
  • 2. 快速重传 (不需要等待超时,三次对端提醒之后自动重传)

基于TCP应用层协议 HTTP HTTPS SSH Telnet FTP SMTP

TCP最大连接数的分析(面试常考)(从四元组的角度入手)

客户端   和  服务器之间建立连接  :  只要确保客户端的 ip +  客户端的  port     两个中存在一个和服务端不同即可建立连接.....    


理论最大 : 最大TCP连接数目  =  客户端ip数目  *  客户端端口数目


ipv4而言理论ip 数目最多是   2 ^ 32   port  数目是  65535 = 2 ^ 16,   所以理论最大的TCP连接数目是    2 ^ 48


但是并发数目是万万不可能达到上述这么多的.    (考虑并发) 首先第一个就是文件描述符的限制  sockfd数量限制,当然这个可以在服务器中修改配置...       ulimit


还有就是内存的限制了,TCP存在发送和接收内核缓冲区, 你用户空间也还要开缓冲区,所以肯定是无法达到上述哪个恐怖的数目的

四. UDP协议

  • 先从报文分析入手

源端口号:  客户端端口号.


目的端口号:服务器端口号, 负责确定交付给哪个应用程序.


一个应用程序可以绑定多个端口号,但是一个端口号一定是对应一个应用程序.(端口号标识唯一应用程序)


16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度


如果校验和出错, 就会直接丢弃


报头理解, 报头实现地方式, 使用C语言中地位段进行理解:  多少位分为一段

UDP的特征:  什么是无连接,不可靠,关键为什么它如此的不稳定但是在现在的短视频 音视频通话 DNS  ARP这些全部都还使用的是UDP作为传输层协议


首先是无连接, 连接是什么:   连接算是一端到另外一端的不存在的一根线 (抽象的来说,这个是我的个人理解, 连接的过程也就是三次握手的过程)对于三次握手不理解的可以看我前文链接存在详解


首先不论是有连接还是无连接,    我们核心应该确定的是什么?    确定四元组,对了四元组,无连接也可以进程间通信,只不过每一次必须传入四元组, 但是口说无凭, 咱看看接口呗。对比一下:

为什么UDP是不可靠连接?


因为UDP没有TCP的哪些为了保证可靠性的机制:   比如超时重传机制,拥塞控制,流量控制机制,为数据包编号排序等...


思考为啥UDP如此不可靠我们还必须要使用它, 而且还会尽量的使其变得可靠, 还要专门做UDP可靠性设计,这个不是多次一举吗. 不如直接使用TCP?


首先解释UDP相比TCP为什么相对实时性好, 在时间上更短, 更加快速。。。

以上是从不必要的三次握手建立连接上解释这个速度问题, 为啥UDP更快


而且在进行数据传输的时候TCP还会存在一定的时间限制,时间阈值,超过这个时间就需要进行重传, 重传也会导致延迟性,向我们的qq聊天呀就经常出现这样的延迟现象,很明显底层应当是采取的TCP作为传输层协议.


根据上述的延迟解释一下音视频通话为例解释下为啥使用UDP而不是TCP?


一句话解释:就是通话延迟的问题,我们qq上发个消息是无所谓,延迟下我们可以等会看嘛,但是你在跟别人搞音视频,像抖音这些,或者各种视频,这个要是通话延迟,几秒前说的话几秒后出来了你这个还搞个屁呀, 还说得清嘛,这个很明显需要实时通话,正是这样的场景存在所以UDP必然是需要的。。。而且现在音视频(短视频)如此火爆更是少不了UDP了


我们再从另外一个角度来分析一下这个问题, 服务端压力上面来考虑。。。

再谈UDP可靠传输的设计。。。  

  • 现有的udp可靠传输协议就是KCP了,感兴趣的还真有必要得去深入研究一下,我个人是研究深度还不够,先暂且浅显的聊一聊这个UDP可靠传输设计的一些基本的东西,KCP要是将来我的理解深入足够会尽力刨析一下...

  • 首先既然提到了MTU  先解释一下  MTU是个啥玩也.

总结UDP可靠传输的学习:


多研究TCP协议的实现


设计  udp可靠传输,和TCP不一样,重传策略受到我们的控制可控  (也不一定所有都需要重传)  像音视频,游戏走位 超时太久丢包就丢了,不需要重传...  但是有些其他应用场景下又必须进行重传


重传时机的确定 (根据具体的业务需求去设计,不要一味追求设计一个通用性的UDP可靠传输协议)

五.   对比TCP和UDP的细节

连接    

 

TCP是面向连接的传输层协议,传输数据前需要先建立连接


UDP 是不需要建立连接的。 即可马上立即传输数据 (接口传入二元组)


服务对象


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


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


可靠性


TCP是可靠交付数据的,数据无差错,不重复,按顺序到达


UDP则是尽力交付,不保证可靠 (因为没有各种传输策略)

总结本文

    • 本文从再看HTTP  和  对比学习   HTTPS入手
    • HTTP协议的学习核心在于搞清楚他是一次性的无状态连接方式,连接建立之后服务结束立马断开连接。。。  
    • 还有就是搞清楚HTTP的报文格式

      上述的核心在于最开始的一行请求行 (请求方法  URL  协议版本) +   状态行(协议版本  状态码  状态码描述字段)   搞清楚空行的作用:分割报头和正文


      HTTPS对比 HTTP学习  :  一个是明文传输的角度来看  另外一个是从网站真实性,身份验证,中间数据修改  的角度来看去分析,HTTPS相对 HTTP多了SSL加密层


      然后是UDP和TCP的学习:


      UDP无连接的  基于一个一个数据包的传输的一种 不可靠传输协议  (但是因为其相对TCP的快速 (实时性更好) + 可制定各种传输策略实现可靠传输 )在音视频通话等领域有着不可替代的作用


      TCP有连接的 基于数据流的可靠传输协议  (可靠的核心在于各种策略机制)


      相关文章
      |
      11天前
      |
      网络协议 SEO
      TCP连接管理与UDP协议IP协议与ethernet协议
      TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
      23 4
      |
      19天前
      |
      前端开发 JavaScript 数据库
      https页面加载http资源的解决方法
      https页面加载http资源的解决方法
      36 4
      |
      18天前
      |
      网络协议 前端开发 API
      HTTP 和 TCP 协议的应用场景有哪些不同
      【10月更文挑战第25天】HTTP(超文本传输协议)和 TCP(传输控制协议)处于网络协议栈的不同层次,各自具有独特的功能和特点,因此它们的应用场景也存在明显的差异。
      |
      18天前
      |
      网络协议
      http 与 tcp 的关系
      【10月更文挑战第25天】总的来说,HTTP 和 TCP 是网络通信中不可或缺的两个协议,它们共同为网络应用提供了可靠的数据传输和交换服务。理解它们之间的关系对于开发和维护网络应用具有重要的意义。
      |
      18天前
      |
      网络协议 API 数据格式
      HTTP 和 TCP 协议的主要区别
      【10月更文挑战第25天】HTTP 和 TCP 在网络通信中扮演着不同的角色,各自具有独特的功能和特点,它们相互配合,共同为实现网络应用的各种需求提供了基础支持。
      |
      1月前
      |
      网络协议 网络性能优化 C#
      C# 一分钟浅谈:UDP 与 TCP 协议区别
      【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
      32 1
      |
      1月前
      |
      网络协议 算法 数据格式
      【TCP/IP】UDP协议数据格式和报文格式
      【TCP/IP】UDP协议数据格式和报文格式
      123 3
      |
      1月前
      |
      安全 应用服务中间件 网络安全
      修复HTTPS升级后出现 Mixed Content: The page at 'https://xxx' was loaded over HTTPS, but requested an insecure frame 'http://xxx'. This request has been blocked; the content must be served over HTTPS. 的问题
      修复HTTPS升级后出现 Mixed Content: The page at 'https://xxx' was loaded over HTTPS, but requested an insecure frame 'http://xxx'. This request has been blocked; the content must be served over HTTPS. 的问题
      |
      Web App开发 前端开发
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
      最近在线上往hbase导数据,因为hbase写入能力比较强,没有太在意写的问题。让业务方进行历史数据的导入操作,中间发现一个问题,写入速度太快,并且业务数据集中到其中一个region,这个region无法split掉,处于不可用状态。
      1339 0