计算机网络基础知识整理(慢慢补全。)

计算机网络

第一章 网络基础知识

1.1 协议

协议是计算机与计算机之间通过网络实现通信时事先达成的一种约定。这种约定使那些由不同厂商的设备、不同的CPU以及不同的操作系统组成的计算机之间,只要遵循相同的协议就能够实现通信。

1.2 服务

服务指下层为紧邻的上层提供的功能调用。有以下分类:

1.2.1 面向连接服务与无连接服务
  • 面向连接服务:通信前双方必须先建立连接,分配相应的资源,保证通信能够正常完成。
  • 无连接服务:通信前双方不需要建立连接,需要发送数据时直接发送。
1.2.2 可靠服务与不可靠服务
  • 可靠服务:网络具有纠错、检错、应答机制,能保证数据正确、可靠地传达到目的地;
  • 不可靠服务:网络只是尽量正确、可靠地传送,但不能保证数据正确、可靠地传送到目的地。
1.2.3 有应答服务与无应答服务
  • 有应答服务:接收方在收到数据后向发送方给出相应的应答,该应答由传输系统内部自动实现,而不是由用户实现。
  • 无应答服务:接收方收到数据后不自动给出应答,若需要应答则由高层实现。

1.3 传输

传输指将数据从一处传递到另一处的过程。

1.3.1 按传输方式分类
  • 电路交换:在源节点与目标节点直接建立一条专用的通路用于传输数据。
  • 报文交换:将用户数据加上源地址、目的地址、校验码等辅助信息,然后封装成报文,发送至相邻节点,等待全部存储完毕后再转发至下一个节点。
  • 分组交换:将数据分成固定长度的数据块,在每个数据块中加上目的地址、源地址等辅助信息组成分组(包),以存储/转发方式传输。
1.3.2 按接收端数量分类

单播(Unicast):一对一通信;
广播(Broadcast):将消息从一台主机发送到与之相连的所有其他主机;
多播(Multicast):将消息发给某一组主机;
任播(Anycast):从目标主机群中选择一台最符合网络条件的主机作为目标主机。

1.4 地址

1.4.1 地址的唯一性

一个地址必须明确地表示一个主体对象,在同一个通信网络中不允许有两个相同地址的通信主体存在。

1.4.2 地址的层次性

将地址的组成分为几个层次,用于在查找时快速定位到某个地址。

1.4.3 不同的协议层使用不同的地址

数据链路层:MAC地址;
网络层:IP地址;
传输层:端口号;
应用层:电子邮箱地址等。

1.5 OSI参考模型

1.5.1 应用层

直接与用户进行交互,为用户提供各种网络服务。

1.5.2 表示层

将数据从某种特定的数据格式转换为网络通用的标准数据格式。

1.5.3 会话层

控制何时建立连接、何时发送数据、使用哪一种连接方式等。

1.5.4 传输层

实现两台计算机之间点对点的传输。

1.5.5 网络层

将数据从发送端主机发送到接收端主机。

1.5.6 数据链路层

实现相互直连的设备之间的传输。

1.5.7 物理层

传输透明比特流。

1.6 TCP/IP协议分层模型

1.6.1 应用层

对应OSI模型的会话层、表示层以及应用层。

1.6.2 传输层

对应OSI模型中的传输层。

1.6.3 网络层

对应OSI模型中的网络层。

1.6.4 网络接口层

对应OSI模型中的数据链路层。

1.6.5 物理层

对应OSI模型中的物理层。

第二章 物理层

第三章 数据链路层

3.1 MAC地址

MAC(Media Access Control,介质访问控制)地址是数据链路层中使用的地址类型,用于识别数据链路中互联的节点。
MAC地址长48bit,格式如下:

  • 第1位:单播地址(0)/多播地址(1);
  • 第2位:全局地址(0)/本地地址(1);
  • 第3~24位:由IEEE管理并保证各厂家之间不重复;
  • 第25~48位:由厂家管理并保证产品之间不重复。

由于其组成的原因,可以保证每块网卡(NIC,Network Interface Card)的MAC地址在全世界是唯一的。
MAC地址一般用6组十六进制数表示,如00-0F-1F-52-EF-F6。

3.2 以太网

3.2.1 以太网帧格式

以太网帧格式

  • 前导码(Preamble):由1和0交替组合而成,表示一个以太网帧的开始。末尾是一个叫SFD(Start Frame Delimiter,帧开始符)的域,值为11。前导码与SFD共计8个字节;
  • 目标MAC地址:接收方的MAC地址;
  • 源MAC地址:发送方的MAC地址;
  • 类型:表示上层协议的类型;
  • 数据:以太网帧的数据部分,范围为46~1500字节。
  • 帧校验码(Frame Check Sequence):用于检查帧是否有所损坏。

第四章 网络层

4.1 IP地址

4.1.1 IP地址的定义

IP地址(IPv4地址)在计算机中由32位二进制数表示,在人类社会中一般将其等分为4组,每组用“.”隔开,并将每组数转换为十进制数。

4.1.2 网络地址与主机地址

IP地址由网络地址与主机地址(网络号与主机号)组成,它们之间的分界点由网络类型与子网掩码确定。

4.1.3 IP地址的分类

IP地址分为五个级别,分别为A类、B类、C类、D类、E类,它们根据IP地址中从第1位到第4位的比特列进行区分。
A类:首位以“0”开头的地址,前8位为网络地址,后24位为主机地址。网络地址范围:0.0.0.0~126.0.0.0(127.x.x.x为回送地址);
B类:前两位为“10”的地址。前16位为网络地址,后16位为主机地址。网络地址范围:128.0.0.0~191.255.0.0;
C类:前三位为“110”的地址。前24位为网络地址,后8位为主机地址。网络地址范围:192.0.0.0~223.255.255.0;
D类:前四位为“1110”的地址。32位均为网络地址,没有主机地址,常被用于多播。网络地址范围:224.0.0.0~239.255.255.255。
E类:前四位为“1111”的地址,32位均为网络地址,没有主机地址,保留作将来使用。网络地址范围:240.0.0.0~255.255.255.255.

4.1.4 特殊IP地址

主机地址全0的IP地址:代表当前子网的网络地址;
主机地址全1的IP地址:代表当前子网的广播地址;
127.x.x.x:环路回送地址,主要用于网络软件测试以及本地机进程间通信;
A类私有地址:10.0.0.0~10.255.255.255(1个A类)
B类私有地址:172.16.0.0~172.31.255.255(16个B类)
C类私有地址:192.168.0.0~192.168.255.255(256个C类)

4.2 子网掩码与CIDR

4.2.1 子网掩码

子网掩码是一个与IP地址相对应的长32bit的二进制串,它由一串1与跟随的一串0组成。1对应IP地址中的网络号与子网号,0对应主机号。计算机只需将IP地址和其对应的子网掩码逐位相与就可得出相应子网的网络地址。

4.2.2 CIDR

CIDR(Classless Inter-Domain Routing,无类别域间路由)是在变长子网掩码的基础上提出的一种消除传统A、B、C类网络划分,并且可以在软件支持下实现超网构造的一种IP地址划分方法。
CIDR使用网络前缀的概念代替子网络的概念,将IP地址划分成(网络前缀,主机号)两部分。网络前缀相同的连续IP地址组成CIDR地址块,这种地址的聚合称为路由聚合。
注意,虽然CIDR不适用子网,但仍使用“掩码”这一名词。“CIDR不使用子网”指的是CIDR没有在32位中指明哪些是子网地址,但分配到一个CIDR地址块的组织,依然可以根据自己的需要在主机号中借用若干位来划分子网。

4.3 IP数据包首部

IP数据包首部

  • 版本(Version):长度为4比特,表示IP首部的版本号。IPv4的版本号即为4。
  • 首部长度(IHL,Internet Header Length):长度为4比特,表示IP首部的大小,单位为4字节(32比特)。对于没有选项的IP包,首部长度字段为“5”,即表示首部长度为5*4=20字节。
  • 区分服务(TOS,Type Of Service):长度为8比特,用于表明服务质量。
  • 总长度(Total Length):长度为16比特,表示IP首部与数据部分合起来的总字节数。因此,IP包的最大长度为65535字节( 2161 )。
  • 标识(Identification):长度为16比特,用于分片重组时确认哪些包原属同一个包。通常,每发送一个IP包,它的值就递增1。
  • 标志(Flags):长度为3比特,表示与分片相关的信息。第一位目前未使用,必须为0;第二位(DF)指示是否进行分片,0表示可以分片,1表示不能分片;第三位(MF)指示在包被分片的情况下,该包是否是最后一个包,0表示是最后一个包,1表示不是最后一个包。
  • 片偏移(FO,Fragment Offset):长度为13比特,用来标识被分片的每一个分段的数据部分相对于原始数据部分的位置,单位为8字节(64比特)。第一个分片对应的值为0。
  • 生存时间(TTL,Time To Live):长度为8比特,表示还可以中转多少个路由器。每经过一个路由器,TTL减少1,变成0则丢弃该包。
  • 协议(Protocol):长度为8比特,表示IP包传输层的上层协议编号。常用:4(IP)、6(TCP)、17(UDP)。
  • 首部校验和(Header Checksum):长度为16比特,用于确保IP数据包没有被破坏。
  • 源地址(Source Address):长度为32比特,表示发送端IP地址。
  • 目的地址(Destination):长度为32比特,表示接收端IP地址。
  • 可选项(Options):长度可变,一般在实验或诊断时使用。可包含以下信息:安全级别、原路径、路径记录、时间戳。
  • 填充(Padding):在有可选项的情况下,首部长度可能不是32比特的整数倍,为此需要向字段填充0,将其长度调整为32比特的整数倍。
  • 数据(Data):(不属于首部部分)数据部分,包括上层协议的首部。

在无可选项的情况下,IP数据包首部长20字节。

4.4 IP协议相关技术

4.4.1 DNS

全称:Domain Name System,域名系统。
作用:实现域名到IP地址的转换。
层次:DNS工作在应用层,使用UDP。
组成:

  • 域名:域名指为了识别主机名称和组织机构名称的一种具有分层的名称,分为顶级域名(com、cn、jp、us)、二级域名(ac、co)、三级域名(baidu、google)。
  • 域名服务器:管理域名的主机和相应的软件,用于管理其所在分层的域的相关信息。按层次高低分为以下四种:
    1. 根域名服务器。知道所有顶级域名服务器的域名与IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。根域名服务器一般并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。
    2. 顶级域名服务器。负责管理在该顶级域名服务器注册的二级域名。
    3. 权限域名服务器。负责管理一个区。
    4. 本地域名服务器。不属于域名服务器的层次结构中,一般主机要进行DNS解析时,会给本地域名服务器发送请求报文,请求它进行DNS解析。
  • 解析器:进行DNS查询的主机和软件。

DNS解析原理:
以解析www.qq.com为例:

  1. 主机向本地域名服务器发起DNS解析请求;
  2. 本地域名服务器向根域名服务器发起解析请求;
  3. 根域名服务器返回负责.com域的顶级域名服务器的IP地址;
  4. 本地域名服务器向负责.com域的顶级域名服务器发起解析请求;
  5. 负责.com域的顶级域名服务器返回负责qq.com域的权限域名服务器的IP地址;
  6. 本地域名服务器向负责qq.com域的权限域名服务器的地址发起解析请求;
  7. 负责qq.com域的权限域名服务器返回www.qq.com的IP地址;
  8. 本地域名服务器向主机返回结果。

共使用8个UDP报文。事实上,大多数的域名服务器具有缓存功能,在收到解析请求时,如果能够在缓存中找到域名对应的IP地址,则会直接返回结果,不进行查询。

4.4.2 ARP

全称:Address Resolution Protocal,地址解析协议。
作用:以目标IP地址为线索,定位下一个应该接收数据包的网络设备的MAC地址。
层次:ARP工作在数据链路层(存疑,也有说是网络层的)。
原理:
假设主机A需要向主机B发送IP数据包,并且主机A的ARP缓存表中没有主机B的MAC地址。此时,主机A就必须利用ARP提供的服务,过程如下:

  1. 主机A通过广播(目标MAC地址FF-FF-FF-FF-FF-FF)发送一个ARP请求包,里面包含了主机A的地址;
  2. 如果主机A与主机B属于同一个网络,主机B会收到该请求包,并向主机A返回一个ARP响应包,里面包含了主机B的MAC的地址。主机A收到该响应包后就获得了主机B的MAC地址,即完成了目标IP地址到目标MAC地址的转换。
  3. 如果主机A与主机B不属于同一个网络,那么主机A就需要将数据包先发送至默认网关上,由默认网关转发至下个节点。同样地,如果主机A不知道默认网关的MAC地址,需要再次使用ARP提供的服务来获取。
4.4.3 ICMP

全称:Internet Control Message Protocol,网际控制报文协议。
作用:在主机和路由器之间传递控制信息。
层次:ICMP工作在网络层。
主要的ICMP消息:

  • ICMP目标不可达消息(类型3):路由器无法将IP数据包发送给目标地址时,会给发送端主机返回一个目标不可达(Destination Unreachable Message)的ICMP消息,并附上不可达的具体原因,用错误号表示。
  • ICMP原点抑制消息(类型4):当路由器由于网络拥堵而无法发送数据包时,会向发送端主机发送一个ICMP原点抑制消息(Source Quench Message)。
  • ICMP重定向消息(类型5):如果路由器发现发送端主机使用了次优的路径发送数据,那么它会返回一个ICMP重定向消息(Redirect Message)给这个主机,并附上最合适的路由信息。
  • ICMP超时消息(类型11):当有IP数据包因为TTL归零而被丢弃时,路由器会给发送端主机发送一个ICMP超时消息(Time Exceeded Message)。
  • ICMP回送应答(类型0)与ICMP回送请求(类型8)消息:用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端。可以向对端主机发送ICMP回送请求消息(Echo Request Message),也可以接收对端主机发回来的回送应答消息(Echo Reply Message)。这也是ping命令的实现原理。
4.4.4 DHCP

全称:Dynamic Host Configuration Protocal,动态主机配置协议。
作用:实现自动设置IP地址、统一管理IP地址分配。
层次:DHCP工作在应用层,使用UDP。
工作原理:假设已有一台配置好的DHCP服务器,现在有一台新主机要求分配IP地址,过程如下:

  1. DHCP Client以广播的方式发出DHCP Discover报文;
  2. 所有的DHCP Server都能够接收到DHCP Client发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向DHCP Client发送一个DHCP Offer报文;DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给DHCP Client使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便DHCP Client区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录
  3. DHCP Client只能处理其中的一个DHCP Offer报文,一般的原则是DHCP Client处理最先收到的DHCP Offer报文。DHCP Client会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址;
  4. DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向DHCP Client响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。
  5. DHCP Client接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则DHCP Client成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果DHCP Client发现分配的IP地址已经被使用,则DHCP Client向DHCPServer发出DHCP Decline报文,通知DHCP Server禁用这个IP地址,然后DHCP Client开始新的地址申请过程。
  6. DHCP Client在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。
  7. 在使用租期超过50%时刻处,DHCP Client会以单播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。
  8. 在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。
4.4.5 NAT(NAPT)

全称:Network Address Translator,网络地址转换。实际使用的多为NAPT(Network Address Port Translator,网络端口地址转换)。
作用:实现在本地网络使用私有地址,在连接互联网时使用全局IP地址。
层次:难以定义,可认为是传输层或是网络层。
原理:NAT(NAPT)路由器中维护一张用于转换的表,用于将内部地址(iAddr:port1)映射到外部地址(eAddr:port2),也就是所有来自(iAddr:port1)的包都会被转换成来自(eAddr:port2)的包。同样地,所有发送至(eAddr:port2)的包都会被发送至(iAddr:port1)。

4.4.6 IP隧道

作用:解决两个IPv6网络中夹着一个IPv4网络导致无法通信的问题。
原理:将IPv6数据包当做一个数据,为其再加上一个IPv4首部后再发送。

4.4.7 移动IP(Mobile IP)

作用:解决智能手机或是笔记本电脑当连接的子网改变时,由于IP地址的改变导致TCP连接断开的问题。
原理:每台主机注册一个归属代理,归属代理会给主机分配一个归属地址。这个归属地址无论主机移动到哪里都不会改变,主机始终使用归属地址进行通信。当主机未移动时连接的网络叫做归属网络,当主机移动后连接的网络叫做外部网络,提供网络服务的叫做外部代理。

  1. 当主机处于归属网络下时,数据包按照正常方式发送(由路由器转交);
  2. 当主机移动之后,发送至主机的数据包首先发送到归属代理,由归属代理通过IP隧道转发至主机的外部代理,由外部代理还原后再转发至主机。主机发送数据包时按照常规方法发送。

4.5 路由协议

4.5.1 路由控制的定义

互联网是由路由器连接的网络组合而成的。为了能让数据包正确地到达目标主机,路由器必须在途中进行正确的转发。这种向正确的方向转发数据所进行的处理就叫路由控制或路由。

4.5.2 自治系统与路由协议

制定自己的路由策略,并以此为准在一个或多个网络群体中采用的小型单位叫做自治系统(Autonomous System,AS)。
自治系统内部使用的路由协议叫做IGP(Interior Gateway Protocol,内部网关协议),自治系统之间使用的路由协议叫做BGP(Border Gateway Protocol)。

4.5.3 静态路由与动态路由

静态路由:由管理者手工添加路由信息;
动态路由:由管理者设置好路由协议,具体的路由表由路由器在工作中动态生成。

4.5.3 RIP协议

全称:Routing Information Protocol,路由信息协议。
层次:RIP是应用层协议,使用UDP传输。
规定:

  1. 网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录。
  2. 距离也称为跳数(Hop Count),规定从一路由器到与其直接连接的路由器的距离为1。
  3. 优先选择跳数少的路径。
  4. 一条路径最多只能包含15个路由器,因此距离等于16时代表网络不可到达。
  5. 仅和相邻路由器交换信息,交换的信息是自己的整个路由表。
  6. 使用距离向量算法维护路由表,路由表项由目的网络、距离、下一跳路由器三项组成。
    距离向量算法:
    假设当前路由器为S,现收到路由器X发来的RIP包(包内为路由器X的路由表),则进行以下操作:(1)将路由器X的路由表中所有的下一跳地址改为X(2)将表中的每一项与自己的路由表进行比较。假设某一项的目的网络为N,如果自己的路由表中没有目的网络为N的表项,则将该项加入;如果自己的路由表中有目的网络为N的表项,且下一跳为X,则进行替换;如果自己的路由表中有目的网络为N的表项,且下一跳不为X,则比较两个表项的距离,如果通过X的距离更短则进行替换。
4.5.4 OSPF协议

全称:Open Shortest Path First,开放最短路径优先。
层次:OSPF是网络层协议,直接使用IP数据包传输。
规定:

  1. OSPF向本自治系统中所有路由器发送信息,使用的是洪泛法。
  2. 发送的信息是与本路由器直接相邻的所有路由器的链路状态,即说明本路由器与哪些路由器相邻,以及该链路的“代价”。
  3. 只有当链路状态变化时才向所有路由器广播信息。
  4. 由于路由器之间频繁地交换链路状态信息,每个路由器最终都能建立一个链路装填数据库,实质上是全网的拓扑结构图。之后就可以使用Dijkstra算法计算出到每个路由器的最短路径。
  5. 路由表中只保留下一跳地址,不存储完整路径。
4.5.5 BGP协议

4.6 IPv6

4.7 IP组播

第五章 传输层

5.1 端口号

5.1.1 端口号的定义

端口号是传输层使用的地址,用来识别一台计算机中进行通信的不同程序。

5.1.2 根据端口号识别应用与通信

端口号可以唯一确定正在通信的应用程序,但不足以确定一个通信。要确定一个通信需要5个信息:源IP地址、目标IP地址、协议号、源端口号、目标端口号。

5.1.3 端口号的分类
  1. 知名端口号(0~1023):HTTP、TELNET、FTP等广为使用的协议使用的端口号。如FTP使用端口号20与21,HTTP使用端口号80等。应用程序必须避免使用知名端口号进行既定目的以外的通信。
  2. 被注册的端口号(1024~49151):一些被注册的端口号,不过它们可用于任何通信用途。
  3. 动态(时序)分配的端口号(49152~65535,老系统中可能会依次使用1024以上空闲的端口号):在实际应用中,服务器有必要确定监听的端口号,而客户端不需要确定端口号。这种情况下可以由操作系统负责提供互不冲突的端口号。

5.2 UDP

5.2.1 UDP的特点

UDP全称User Datagram Protocol,用户数据包协议。有以下特点:

  1. UDP数据包发送时无需建立连接。
  2. 无连接状态。
  3. 首部开销小。TCP首部有20字节开销,而UDP首部仅8字节。
5.2.2 UDP数据报格式

UDP数据报格式
UDP数据报包含以下内容:

  • 源端口:发送端端口号,不需要回信可用全0。
  • 目的端口号:接收端端口号,必须。
  • 长度:UDP数据报长度,包括首部和数据,最小为8。
  • 校验和:检测UDP数据报在传输中是否有错。可选,不计算可用全0。计算方法是使用二进制反码求和再取反。注意:(1)UDP的校验和是把首部和数据部分一起检验,不同于IP的只检验首部。(2)计算之前需要加上12字节的伪首部,如下:

UDP伪首部

5.3 TCP

5.3.1 TCP的特点

TCP全称Transmission Control Protocol,传输控制协议,具有以下特点:

  1. TCP是面向连接的传输层协议。
  2. 每一条TCP连接只能有两个端点,即TCP连接只能是点对点的。
  3. TCP提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序。
  4. TCP提供全双工通信,即允许通信双方的应用进程在任何时候都能发送数据,为此TCP连接的两端都设有发送缓存与接收缓存,用来临时存放双向通信的数据。
5.3.2 TCP报文段格式

TCP报文段既可以用来运载数据,也可以用来建立连接、释放连接和应答。首部最短为20字节,格式如下:
TCP报文段格式

  • 源端口和目的端口:各占2字节。
  • 序号:占4字节。TCP是面向字节流的,所以TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段发送的数据的第一个字节的序号。
  • 确认号:占4字节。确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号=N,则表明到序号N-1为止的所有数据都已正确收到。
  • 数据偏移(即首部长度):占4位,表示TCP报文段的数据起始处距离报文段起始处的距离(也就是首部长度)。单位是32位(4字节)
  • 保留字段:占6位,保留为以后使用,目前应为全0。
  • 紧急位URG:当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送。URG需要和紧急指针配套使用。
  • 确认位ACK:只有当ACK=1时确认号字段才有效。TCP规定在连接建立后所有传送的报文段必须把ACK置为1。
  • 推送位PSH:接收TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不是等到缓存满了再交付。
  • 复位位RST:当RST=1时,表明TCP连接中出现严重差错,必须释放连接然后再重新建立运输连接。
  • 同步位SYN:SYN=1表示这是一个连接请求或连接接收报文。当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1。
  • 终止位FIN:用来释放一个连接。FIN=1表明此报文段的发送方的数据已经发送完毕,并要求释放传输连接。
  • 窗口字段:占2字节。它指出了现在允许对方发送的数据量,单位为字节。例:确认号701,窗口字段1000表明接收方还能接收序号为701~1700的数据。
  • 检验和:占2字节。检验和字段检验的部分包括首部和数据两部分。在计算检验和时,和UDP一样要在前面加上12字节的伪首部(只需将UDP伪首部的第四个字段即协议字段从17改成6)。
  • 紧急指针字段:占16位,指出在本报文段中紧急指针有多少个字节(紧急指针放在数据最前面)。
  • 选项字段:长度可变。最初只规定了一种选项,即最大报文段长度(Maximun Segment Size,MSS)。
  • 填充字段:用于保证首部长度为4字节的整数倍。
5.3.3 TCP连接的建立

TCP连接的建立需要三个步骤,常被称为“三次握手”,如下:

  1. 客户机的TCP首先向服务器的TCP发送一个连接请求报文段,这个报文段不含应用层数据,首部中的SYN=1。另外,客户机会随机选取一个初始序号seq=x(连接请求报文不含数据,但还是要消耗一个序号)。
  2. 服务器的TCP接收到连接请求报文段后,如果同意建立连接,就发回确认报文段,并为该TCP连接分配TCP缓存与变量。确认报文段中SYN=1,ACK=1,确认号为x+1,并且服务器随机产生初始序号seq=y(确认报文不含数据,但还是要消耗一个序号)。
  3. 客户机收到确认报文段后,还要向服务器发回确认,并且也要给该连接分配缓存与变量。这个报文的ACK=1,序号字段x+1,确认号y+1。
5.3.4 TCP连接的释放

参与TCP连接的两个进程中的任何一个都能终止该连接。终止TCP连接需要四个步骤,称为“四次挥手”,如下:

  1. 客户机打算关闭连接,就发送一个连接释放报文段,并停止发送数据。该报文段FIN=1,seq=u,它等于前面已传送过的数据的最后一个字节序号+1。
  2. 服务器收到连接释放报文段后发出确认,确认号ack=u+1,序号=v,等于前面已传送过的数据的最后一个字节的序号+1。此时,从客户机到服务器方向的连接就释放了,TCP连接处于半关闭状态。
  3. 若服务器没有要向客户机发送的数据,就通知TCP释放连接,发出FIN=1的连接释放报文段。
  4. 客户机收到连接释放报文段后,必须发出确认。报文中确认号ack=v+1,序号seq=u+1。

注意:无论是连接还是释放,用到确认号的话ACK就必然为1。

5.3.5 TCP可靠传输

TCP使用了序号、确认、重传等机制保证可靠传输。

  • 序号:TCP连接中传送的数据流中的每一个字节都被编上一个序号。序号从0开始。
  • 确认:TCP首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。TCP默认使用累计确认。
  • 重传:有两种事件会导致TCP对报文段进行重传:超时和冗余ACK。(1)超时:TCP始终维护一个动态变化的RTT(Round-Trip Time)值,用于记录报文段的往返时间。在RTT的基础上,再计算一个RTO(Retransmission Time-Out,超时重传时间)值。TCP每发送一个报文段就设置一个计时器,如果计时器时间超过RTO时还没有收到确认则重传。(2)冗余ACK:冗余ACK指再次确认某个报文段的ACK,即发送方先前已经收到过对该报文段的确认。TCP规定每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期望收到的字节的序号。当发送方收到对同一个报文段的3个冗余ACK时,即可认为跟在这个报文段后面的报文段已经丢失,此时发送方可以立即重传。这种技术也成为快速重传。
5.3.6 TCP流量控制

流量控制的目的是消除发送方使接收方的接收缓存溢出的可能性。TCP提供一种基于滑动窗口协议的流量控制机制。在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接受窗口rwnd。同时,发送方根据其对当前网络拥塞程度的估计确定一个拥塞窗口cwnd。发送方实际的发送窗口大小=min(rwnd,cwnd)。

5.3.7 TCP拥塞控制

拥塞控制的目的是防止过多的数据注入网络中,使网络中的路由器或链路不过载。主要通过以下四种算法:慢开始、拥塞避免、快重传、快恢复。
(1)慢开始算法:在TCP刚连接好,开始发送TCP报文段时,先令拥塞窗口cwnd=1,即一个最大报文段长度MSS。每当收到一个对新的报文段的确认时,将cwnd值加1,即增大一个MSS。慢开始算法会产生以下效果:每经过一个传输轮次(即一个往返时延RTT),cwnd值就会加倍,即cwnd值会呈指数增长。cwnd值会一直增大到一个规定的慢开始门限ssthresh,然后改用拥塞避免算法。
(2)拥塞避免算法:发送端的cwnd每经过一个RTT就增加一个MSS,而不是加倍,使cwnd线性缓慢增长(加法增大)。当出现一次超时(网络拥塞)时,令慢开始门限ssthresh等于当前cwnd的一半(乘法减小)。
当网络出现拥塞时,无论在慢开始阶段还是拥塞避免阶段,只要发送方检测到超时事件的发生(没有按时收到确认),就把ssthresh设置为出现拥塞时的cwnd值的一半(不能小于2),然后把cwnd值重新置为1,执行慢开始算法。这样就能迅速减少发送的数据量,缓解网络拥塞。
快重传与快恢复是对慢开始和拥塞避免的补充:
(1)快重传:发送方收到三个冗余ACK报文时,直接重传对方尚未收到的报文段,而不必等待那个报文段的计时器超时。
(2)快恢复:发送端收到三个冗余ACK报文时,执行“乘法减小”,把ssthresh设置为出现拥塞时cwnd值的一半,并把cwnd值设为ssthresh改变后的数值(慢开始直接设为1)。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值