网络协议报文理解刨析篇二(再谈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有连接的 基于数据流的可靠传输协议  (可靠的核心在于各种策略机制)


      相关文章
      |
      5月前
      |
      XML JSON API
      识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
      本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
      |
      5月前
      |
      Android开发 Kotlin
      |
      4月前
      |
      网络协议 安全 网络安全
      什么是TCP/UDP/HTTP?它们如何影响你的内网穿透体验?
      数据的传输离不开各种协议,它们就像现实世界中的交通规则,规定了数据如何打包、寻址、传输和接收。对于使用内网穿透的用户来说,理解TCP、UDP和HTTP这些基础协议的特点,能帮助你更好地理解其性能表现,并选择最适合的配置方案。
      |
      6月前
      |
      网络协议 安全 网络安全
      详细阐述 TCP、UDP、ICMPv4 和 ICMPv6 协议-以及防火墙端口原理优雅草卓伊凡
      详细阐述 TCP、UDP、ICMPv4 和 ICMPv6 协议-以及防火墙端口原理优雅草卓伊凡
      541 2
      |
      5月前
      |
      缓存 网络协议 API
      HTTP/1.1相较于HTTP/1.0所实现的性能提升点分析。
      通过以上的技术改进,HTTP/1.1显著提升了Web的性能和可靠性,同时减少了带宽的使用和服务器的负载。这些特性直到今天仍然是现代Web通信的基础。尽管如今HTTP/2和HTTP/3逐渐取代了旧的协议,以上所述的HTTP/1.1性能提升对所有后续版本仍然有着深远影响。
      213 0
      |
      7月前
      |
      安全 网络安全 数据安全/隐私保护
      网页安全演进:HTTP、HTTPS与HSTS
      这整个进程实质上是网页安全由“裸奔”到“穿衣”再到“绑带”的演变史。它保障了数据的机密性和完整性,降低了中间人攻击的风险,最终实现了更自由、更安全的网络环境。但别忘了,技术永远在发展,网络安全的赛跑也永无终点。*ENDPOINT*
      471 11
      |
      8月前
      |
      网络协议 API 开发者
      分析http.client与requests在Python中的性能差异并优化。
      合理地选择 `http.client`和 `requests`库以及在此基础上优化代码,可以帮助你的Python网络编程更加顺利,无论是在性能还是在易用性上。我们通常推荐使用 `requests`库,因为它的易用性。对于需要大量详细控制的任务,或者对性能有严格要求的情况,可以考虑使用 `http.client`库。同时,不断优化并管理员连接、设定合理超时和重试都是提高网络访问效率和稳定性的好方式。
      207 19
      |
      机器学习/深度学习 人工智能 网络协议
      TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
      TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
      436 4
      |
      域名解析 网络协议
      IP协议, TCP协议 和DNS 服务分别是干什么的?
      大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
      538 0
      IP协议, TCP协议 和DNS 服务分别是干什么的?
      |
      网络协议
      ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
      ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
      ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。