Networks
Four Layers of TCP/IP model.
IP
IP 是网络层(数据包)协议,分为 IPv4 和 IPv6。
IP 地址的长度
IPv4 长度是 32位,是 4 组 8 位二进制,可以用点分十进制表示,如 255.255.255.255
, 用二进制表示就是 11111111 11111111 11111111 11111111
, 即 32 位。
IPv6 长度是 128 位,由 8 个字段组成,每一块都表示四个 16 进制数,如 ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
, 最大地址个数为 2^32 个。一个 16(0 - F) 进制由 4 位二进制表示,一个字段长度为 16 字节,总长度 16 * 8 = 128 字节。
IP 地址的类别
类别 | 网段 | 区分 | 地址范围 |
---|---|---|---|
A | 0~127 | 二进制首位为0 | 1.0.0.1~127.255.255.254 |
B | 128~191 | 二进制首位为10 | 172.16.0.0~172.31.255.254 |
C | 192~223 | 二进制首位为110 | 192.168.0.1~192.168.255.254 |
D | 224~239 | 二进制首位为1110 | 224.0.0.0~239.255.255.254 |
E | 240~255 | 二进制首位为1111 | 240.0.0.0~255.255.255.255 |
TCP
TCP 和 IP 的关系:IP 数据包分为 IP 头部和 IP 数据部分,IP 数据部分中包括 TCP 头部加 TCP 数据部分。
Questions
-
How long should the sender wait for an acknowledgement from the receiver?
-
What if the receiver cannot process data as fast as it is sent?
Flow control is required, when the receiver cannot process data as fast it is sent.
-
What if the network in between (a router, for example) cannot process data as fast as it is sent?
TCP Basics
TCP 是一个面向连接(connection-oriented)的协议。
TCP 的可靠基于超时和重传策略。
TCP 是一个流协议,所以当丢包、包乱序或者包损坏时会 buffer 数据,直到把完整的数据发送给应用层的 socket.
TCP header 中保存着在流中的 index, 这使得流可以分割为若干个段(segments), 而 TCP 可以重新打包它们。
如果 TCP 收到了被损坏的包或者段,直接丢弃之而不需要通知发送端;发送端未收到接收端的 ack 的话,则会重传。
TCP 四层模型
层数 | 备注 |
---|---|
应用层 | FTP 协议(21 连接, 20 传输) |
运输层 | TCP 协议,在不可靠的 IP 层上,提供了一个可靠的运输层,为了提供这种可靠的服务,TCP采用了超时重传、发送和接受端到端的确认分组等机制。 |
网络层 | IP 协议,提供的是一种不可靠的服务。它只是尽可能快地把分组从源节点送到目的节点,但不提供任何可靠性的保证。 |
链路层 | 以太网协议、令牌环协议 |
对比 OSI 的七层模型:
OSI 七层模型 | |
---|---|
应用层 | HTTP, FTP, SMTP, POP3…等应用程序协议,SNMP,SOCKET, S-HTTP 等;计算机用户以及各种应用程序和网络之间的接口。 |
表示层 | 信息的语法已经它们的关联,加密解密,压缩解压缩等 |
会话层 | 不同用户机器上的用户之间建立以及管理会话,安全协议,目录访问协议 |
传输层 | TCP,UDP;OSI的下三层的主要任务是数据传输,上三层的主要任务是数据处理;该层的作用是保证报文的正确传输;功能有传输连接管理、处理传输差错。 |
网络层 | IP/IPv6, ICMP, IGMP, 控制子网的运行,如逻辑编址、分组传说、路由选择;将数据链路层的数据转化成数据包,通过路径选择、分段组合、顺序、进出路由控制等,将信息从一个网络设备传送到另一个网络设备,解决同意网络内节点之间的通信 |
链路层 | 物理寻址,同时将原始比特流转变为逻辑传输线路; 通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路; 将物理层的数据封装成帧,传送到上一层,或者将上一层的数据帧拆装为位流形式转发到物理层。 |
物理层 | 原始比特流传输,IEEE 802.2, Ethernet v2, Internetwork |
TCP Header
0 15 31
-----------------------------------------------------------------
| source port | destination port |
-----------------------------------------------------------------
| sequence number |
-----------------------------------------------------------------
| acknowledgment number |
-----------------------------------------------------------------
| HL | rsvd |C|E|U|A|P|R|S|F| window size |
-----------------------------------------------------------------
| TCP checksum | urgent pointer |
-----------------------------------------------------------------
对于 sequence number
而言,the Sequence Number represents the TCP segment’s window index, 握手是存储的是 ISN(Initial Sequence Number).
ACK 段包含了发送端希望接收的下一个字节的窗口索引,握手过后 ACK 这段始终不能为空。
HL 表示 Header Length,其他字段含义如下:
标志位 | 含义 |
---|---|
Congestion Window Reduced © | 发送端降低发送速率 |
ECN Echo (E) | 发送端收到拥塞通知 |
Urgent Pointer (U) | 段中包含优先级数 |