目录:

TCP/IP协议

分享本文:

Share Buttons
文章目录

1983年,阿帕网全面切换TCP/IP协议,在此之前,世界上已经有多种网络,美国有阿帕网、卫星网、无线电台网、本地局域网,欧洲也有各种科研网络,但是每种网络都有自己的传输标准,数据只能在单一网络内部流转。

IP协议是什么?

IP(Internet Protocol)是实现跨网络寻址和数据路由转发的核心协议。

IP地址

给每台需要连网的设备分配一个全球唯一的IP地址。经过互联网传输的数据,都要写上发送方和接收方的 IP 地址,这样就能知道每一份数据是从哪里来的,要往哪里去。

随着联网设备增加,IP地址从 IPv4 升级到地址容量更大的 IPv6,格式也有所改变。

  • IPv4地址示例(十进制):43.136.36.74
  • IPv6地址示例(十六进制):2400:da00:0000:0000:0000:0000:0000:6666(简写2400:da00::6666)

IP地址由网络号 + 主机段组成。比如说,我在腾讯云上面买了一台服务器,它的 IP 地址是43.136.36.74,结合子网掩码可以算出,43.136 是该服务器所在机房的网络号,36.74是我的主机段。

TCP/IP协议

IP 地址和子网掩码本质上都是二进制数字,将其并排对照就能很直观地区分网络段和主机段:

  • IPv4 地址:00101011 . 10001000 . 00100100 . 01001010
  • 子网掩码:11111111 . 11111111 . 10000000 . 00000000

IP寻址

知道目标设备的IP地址之后,如何在互联网中找到这台设备呢?

假如我在浏览器地址栏输入一个IP地址(目标IP),电脑会先判断自身IP和目标IP是否在同一内网网段。如果一致,在局域网内查找设备,如果不一致,在外网查找设备。这个过程,我们叫IP寻址,流程如下:

  1. 电脑把目标 IP 交给 TP-Link 路由器(网关)。TP-Link 路由器对照自身路由表,将数据包转发给小区机房。
  2. 小区机房只记录本小区的子网 IP,陌生 IP 会往市级骨干机房传递。
  3. 市级骨干机房储存本市各类聚合网段,匹配到本市 IP 就往下分发,陌生 IP 则往上报送。
  4. 市 – 省 – 大区机房遵循同样规则向下分发或向上报送,直至找到目标设备——广州腾讯云专线机房。
  5. 广州腾讯云机房根据 IP 末尾的主机段,定位到机房内对应的云服务器。
  • 每个机房都会有一个路由表,记录各子网、聚合网段对应的转发线路;
  • 跨运营商(移动、电信、联通)流量可以在市级或大区级互联节点互相转发。

全球IP地址的管理者

  • 1972年,Jon Postel 受互联网技术社群推举,负责全网 IP 地址的登记工作。
  • 1992~2005年,五大区域性 IP 分配机构陆续成立,这些机构先申领超大块 IP 地址段,然后再拆分发放给区域内的企业和运营商。
  • 1998年,非营利性组织 ICANN 在美国成立,随后逐步接管 IP、域名管理职能,受美国监管。
  • 2016年,ICANN 改为全球各国、企业、技术社群共同参与的多方共治模式,直到今天。

TCP协议是什么?

TCP(Transmission Control Protocol,传输控制协议)是指经过互联网传输数据时,要遵守的通信规则。这套规则覆盖数据传输的全过程:建立连接、数据传输、断开连接。

TCP协议中的连接与断开

TCP规定,建立连接时需要3次握手,断开连接时需要4次挥手,这个规则从1983年沿用至今。比如我用的电脑是设备A,网站 https://wmabby.cn/ 所在的服务器是设备B,参考一对一打电话的场景,TCP决定的规则大概是这样的:

三次握手建立连接

确认双方都能收发数据才能开始。

  1. A对B说:喂,能听到吗?(验证 A→B 通路正常)
  2. B对A说:听到了,我说话你能听到吗?(验证 B→A 通路正常)
  3. A对B说:听到了。(双向通信正常,具备数据传输的条件)

四次挥手断开连接

确认双方数据传输都已经结束后才能断开。

  1. A对B说:我说完了。
  2. B对A说:收到。(B知道A说完了)
  3. B把话说完,然后对A说:我也说完了。
  4. A对B说:好的,那挂了。(A知道B说完了)

TCP协议中的数据传输

数据拆分

TCP会把大数据包拆分成独立的小型数据包(以太网常用标准是1500字节以内),每个小型数据包有独立的编号。不同的数据包可以经由不同的网络线路传输,抵达目标设备时,再按照编号把数据串联起来。

数据校验

发送设备会根据数据包里的所有内容,并结合收发设备的IP地址,通过固定算法得到校验码,附在 TCP 头部。接收方收到内容后,也要用同样的算法算一遍,通过对比校验码是否一致,就可以判断出数据在传输过程中是否出错或损坏。如果校验码不一致,会触发重传机制,让发送端重新发送,异常包则自动丢弃。

流量控制

为了防止发送的数据量超出接收设备缓存的处理能力,接收设备收到数据包后需要提供回执,即ACK(Acknowledgment,确认报文),ACK中会写明接收设备当前还能接收的字节容量,发送设备根据该容量分批发送剩下的数据,确保不会超出接收端的承载能力。

速率控制

也叫拥塞控制,作用是管控发送数据包的速度,避免因中间网络链路、路由交换机负载过高引发拥堵丢包。

发送设备在发送数据包的同时,会启动计时器,与收到ACK的时间进行比较,就可以得知 RTT(Round-Trip Time,往返时间)。往返时间越短,说明网络越通畅、链路资源越富余。

接收设备在收到第一个数据包的时候,也会启动计时器,最多等待 500ms(主流浏览器是200ms),如果等待期间收到第二个数据包,会立刻发 ACK,如果等待期间没有收到第二个数据包,超过500ms时也发ACK.

如果发送设备长时间收不到ACK,或者收到三次重复的ACK,都会判定数据包丢失,触发重传机制,这时候,发送端会降低发包速率。其中,前者属于重度丢包,发包速率会降到最低,后者属于轻度丢包,传输速率减半。反之,如果发送设备持续稳定收到不重复的 ACK,说明没有丢包,就会逐步提升传输速度,充分利用空闲带宽。

分享本文:

Share Buttons