TCP/IP知识点总结

目录

1. 网络基础

1.1 IP地址

1.2 子网掩码

 1.3 MAC地址

2. 网络设备及使用

2.1 集线器:转发所有端口

2.2 交换机:MAC 地址交换表 + 转发对应端口

2.3 主机:网络分层从上到下封装

2.4 路由器

3. 网络数据传输流程

3.1 局域网传输流程:集线器

 3.2 局域网传输流程:交换机

 3.3 局域网传输流程:交换机+路由器

3.4 广域网数据传输流程

3.5  在浏览器中输入url之后,会执行什么流程?

4. 应用层重点协议 

4.1 DNS 

4.2 NAT

4.3 NAPT

4.4 HTTP

4.5 HTTPS 

4.5.1 解决信任问题

4.5.2 解决明文传输和完整性问题

4.5 3(MS)浏览器和客户端使用 HTTPS 交互的流程: 

5. 传输层重点协议

5.1 TCP 协议

5.2 TCP 原理(8大特性)

5.2.1 确认应答机制(安全机制)

5.2.2 超时重传机制(安全机制)

5.2.3 连接管理机制(安全机制)

5.2.4 滑动窗口(效率机制)

5.2.5 流量控制(安全机制)

5.2.6 拥塞控制(安全机制)

5.2.7 延迟应答(效率机制)

5.2.8 捎带应答(效率机制)

5.3 TCP其他特性

5.3.1 TCP是面向字节流 

5.3.2 缓冲区

5.3.3 大小限制

5.4 TCP异常情况

5.5. UDP协议

5.5.1 UDP 协议端格式

5.5.2 UDP的特点

5. 大小受限 

6. 网络层重点协议

6.1 IP 协议

7. 数据链路层重点协议

7.1 以太网 

7.2 以太网帧格式

7.3 MTU

7.3.1 MTU 对 IP 协议 影响

7.3.2 MTU 对 UDP 协议 影响

7.3.3 MTU对于TCP协议的影响

 7.4 APR协议

7.4.1 ARP协议的作用


1. 网络基础


1.1 IP地址

1.1.1 概念

IP地址:指的是互联网协议地址。

1.1.2 作用

IP地址是IP协议提供的统一地址格式,为互联网上每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

1.1.3 格式

IP地址是一个32位的二进制数,被分割为4个“8位二进制数” 。通常使用 a.b.c.d 的方式来表示(“点分十进制”),a,b,c,d都是0~255之间的十进制整数。

1.1.4 组成

IP 地址由网络号主机号组成。

网络号:标识网段,保证相互连接的两个网段有不同的标识。

主机号:标识主机,同一网段,主机之间具有相同的网络号,但是必须有不同的主机号。(在相互连接的网络中,每台主机的IP地址都是唯一的。)

1.1.5 分类

划分网络号和主机号,把IP地址分为 A、B、C、D、E五类。

0为A类,10为B类,110为C类,1110为D类,1111为E类。

TCP/IP知识点总结_第1张图片

特殊的IP地址

127.*IP地址用于本机环回(loop back)测试,通常是127.0.0.1 。本机环回主要用于本机到本机的网络通信。

IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。

IP 地址中的主机地址全部设为 1 ,就成为了广播地址,用于给同一个链路中相互连接的所
有主机发送数据包。

 A类地址的网络数少但主机数多,C类诋毁的网络数多但主机数少,会造成网络号内的主机号无法完全分配,造成地址资源利用率低的问题。

当主机数远远少于主机连接最大数量时,就会造成IP地址浪费。为此,引入子网掩码来解决浪费问题。

各类地址表示范围:

TCP/IP知识点总结_第2张图片

1.2 子网掩码

子网掩码是一台主机或路由器使用的分配位,用来确定如何从一台主机对应的IP地址中获得网络和子网信息。子网掩码和IP地址长度一样,IPv4 为32位,IPv6为128位。

TCP/IP知识点总结_第3张图片

IP地址:16位网络号 + 16位主机号 ,使用子网掩码来划分子网,即划分子网后,17位都是网络号,也就是将原来16位的主机号划分为1位子网号 + 15位主机号。此时,IP地址组成为:网络号 + 子网号 + 主机号

网络通信时,子网掩码结合IP地址,可以计算获得划分后的网络号和主机号。一般用于判断目的IP与本机IP是否为同一个阶段。

计算方式:

IP地址和子网掩码 按位与 得到 网络号。

子网掩码 按位取反 ,再与IP地址 与 运算 ,得到主机号。

TCP/IP知识点总结_第4张图片

 
1.3 MAC地址

Mac  地址,标识网络设备的硬件物理设备。是在媒体接入层上使用的地址,也叫物理地址、硬件地址、链路地址。MAC地址与网络无关,即无论带有这个地址的硬件(比如网卡、集线器、路由器等)接入到网络的何处,都是相同的MAC地址。

主机具有一个或多个网卡,路由器有两个或两个以上网卡,每个网卡都有唯一的MAC地址。只能基于MAC地址识别网络设备的网络物理地址。

网络通信,即就是网络数据传输本质上是网络硬件设备,将数据发送到网卡上,从网卡上接收数据。

MAC地址是网络设备制造商在生产时写在硬件内部,因此没有办法修改。

MAC地址通常表示为12个16进制的数,每2个16进制数之间用冒号隔开,比如:08:00:27:03:fb:19

广播数据报:发送一个广播数据报,即就是对同网段所有主机发送数据报。

广播数据报的MAC地址:FF:FF:FF:FF:FF:FF 

IP地址是 路途总体的起点和终点。(网络逻辑地址)

MAC地址是要从出发点到达目的路途上要经过的每一个区间的起点和终点。(网络物理地址)

(“一跳一跳的网络数据传输”)

比如:

A从陕西西安到北京,行程是:西安、太原、河南、北京。

IP地址描述的就是起点和终点:西安、北京。

MAC地址描述的是路途上每个区间的起点和终点:西安--太原、太原--河南、河南--北京。

2. 网络设备及使用

2.1 集线器:转发所有端口

对接收的信号进行再生放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。它工作于物理层 ,发送到集线器的任何数据,都只是简单的将数据赋值并转发到其他所有的端口。

TCP/IP知识点总结_第5张图片

集线器属于纯硬件网络底层设备,基本上不具有类似交换机的“记忆”“学习”能力,也不具备交换机所具有的MAC地址表,所以集线器所发送的数据都是采用广播方式发送。 

2.2 交换机:MAC 地址交换表 + 转发对应端口

交换机工作与数据链路层,它的内部会记录一张MAC地址转换表。

MAC地址转换表:

1. MAC地址表主要记录MAC地址与端口(交换机后面的物理接口)之间的映射。

2. 主机连接到交换机,以及主机发送数据的时候,交换机可以学习并记录该主机的MAC地址与端口信息。

3. 交换机收到数据之后,在MAC地址转换表中,通过目的MAC查找对应的端口,则目的主机为该端口相连的主机。只需要将数据转发到对应的端口上。

4. 通过MAC地址表可以找到对应端口的情况,如果找不到,交换机会设置数据报目的MAC为广播地址FF:FF:FF:FF:FF:FF,发送到所有的端口,目的主机接收到数据报之后,会返回响应给交换机,交换机再记录该主机与它的端口的映射信息到MAC地址表中。

TCP/IP知识点总结_第6张图片

2.3 主机:网络分层从上到下封装

发送数据报时,发送端主机需要现根据网络分层从上到下封装:

TCP/IP知识点总结_第7张图片

如果此时,源主机和目的主机在同一网段,那么下一跳设备就是目的主机;否则,源主机与目的主机不在同一网段时,源主机不知道目的主机在哪里,会设置下一跳为网管设备(常用的网关设备有路由器)。

此时无论源主机和目的主机在不在同一网段,下一跳的IP地址都可以找到,但设备的MAC地址可能会不知道,这时,可以通过ARP寻址

IP地址查找:开始菜单,输入cmd,回车 ----- > 输入ipdonfig ,回车。 -----> IPv4 

APR寻址:

APR是根据IP地址获取物理地址的一个TCP/ IP协议,它是介于数据链路层和网络层之间的协议,它建立了IP地址 和 MAC 地址之间的映射关系。

主机发送信息时,将包含目标IP地址的APR请求广播给网络上的所有主机,并接受返回的消息,来确定目标主机的物理地址,收到消息后,将该IP地址和物理地址存入本机APR缓存表中并保留一定的时间,下次请求时直接查询APR 缓存以节约资源。

工作原理:

源主机向目标主机第一次发送消息,源主机只知道目标主机的IP地址,但不知道它的MAC地址。此时,源主机现以广播的形式发送携带 源主机的IP地址,MAC地址,目标主机的IP地址  信息的APR请求 ,在同一局域网上所有的主机都会收到这个请求,但只有目标主机的IP地址 会和 请求匹配,此时,目标主机会记下这个请求以及源主机的IP地址 和 MAC地址,写入APR缓存。最后目标主机以单播的形式发送 目标主机的IP地址和MAC地址 信息的APR响应,源主机收到响应后,记下目标主机的IP地址和MAC地址,并写入APR缓存。

2.4 路由器

路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用,是读取每一个数据包中的地址然后决定如何传送的专用智能型网络设备。简单来说就是,一个局域网里面的网络要访问外面,就需要路由器作为网关,通过路由器访问出去。 

路由器的每个端口都相当于一个网卡,都有IP地址以及MAC地址,每个端口之间都可以连接一个局域网,而且每个端口的IP 和 连接的局域网 使用一个网段。 

作用:

(1)网关:路由器作为网关,可以划分为局域网和区域网,某些路由器还可以将局域网划分为多个子网(不同网段)。(公网端口即WAN口,是单独的网卡,具有公网IP地址和WAC地址。局域网端口即LAN口,划分多个子网,每个端口都有单独的网卡,具有该网段IP地址和MAC地址 )

 划分局域网和公网时,局域网内主机发送数据到公网主机时,需要基于NAPT协议,将局域网主机的IP地址和端口号,转换为路由器公网IP和端口号,因为接收端返回的相应数据报,目的IP和目的端口号无法使用局域网IP和端口。

划分局域网多个子网时,可以直接通过APR寻址找到局域网任意主机。

(2)路由:

路由就是在复杂的网络结构中,找出一条通往终点的路线。

网关与路由的区别:

如果只是连接两个网络,只需要网关就够了;如果是连接多个网络,为了保证网络的可靠性,需要网关和路由器两种设备。网关负责连接,路由器负责决定最短距离。

3. 网络数据传输流程

3.1 局域网传输流程:集线器

使用集线器网络互联的情况下,发送端主机发送数据包时,需要从上到下封装数据包。但封装时,目的MAC可能并不知道,因此需要先进性APR寻址:

(1)发送端在本机APR缓存表中,根据目的IP查找对应的MAC地址。

(2)如果找到,则可以在数据链路层以太网帧头中,设置目的MAC并发送数据报。

(3)如果没有找到,需要先发送APR广播请求,让接收端告诉自己它的目的MAC地址是什么。

(4)接收到接受端相应的信息之后,发送端更新本机APR缓存表,保存目的IP地址和MAC地址。

TCP/IP知识点总结_第8张图片

 涉及知识点:集线器转发、封装、APR寻址、APR广播

 3.2 局域网传输流程:交换机

TCP/IP知识点总结_第9张图片

涉及知识点:交换机MAC地址转换表 

 3.3 局域网传输流程:交换机+路由器

假设,网段1和网段2由路由器相连  

网段1:192.168.1.0

(1)发送端主机发送数据包时,需要从上到下封装数据包(同上)

(2)先查看目的主机是否和本机是同一网段:

        a. 通过某个IP与本机的子网掩码位于计算得到对应的IP网段。

        b. 计算出本机网段,目的IP主机的网段

        c. 判断目的主机和本机是否为同一网段,如果是同一网段,和之前局域网(交换机)流程一样。

(3)本机无法处理跨网段的数据报,交给网关处理:

        a. 找到本机相连的网关设备IP,即路由器1的IP

        b. APR寻址,根据网关IP查找对应的MAC地址

 (4)发送数据报到网关设备,此时数据报中有源IP、目的IP、源端口、目的端口、源MAC(主机1的MAC)、目的MAC(路由器1的MAC)

(5)根据目的MAC找到对应的端口:

        a. 交换机在MAC地址转换表中,根据目的MAC查找对应的端口

        b. 找到对应端口相连的设备并发送数据 

(6)交换机转发数据报到网关,即路由器 。

路由器

(7)分用解析数据包:

        a. 从下到上分用

        b. APR寻址,找到目的IP对应的MAC

        c. 封装数据报并发送到目的主机

(源MAC:路由器的MAC,目的MAC:主机6的MAC)

 网段2:192.168.2.0

(8)找到网段2中的交换机

(9)接受,从下到上分用:数据链路层--网络层--传输层--应用层(同上)

(10)返回响应数据报(同上)

涉及知识点:子网掩码、网关

3.4 广域网数据传输流程

涉及的知识: DNS NAPT ,路由

3.5  在浏览器中输入url之后,会执行什么流程?

MS:

请说明在浏览器中输入url之后,会执行什么流程?

1. 执行DNS域名解析;(浏览器会先搜索自己的DNS搜索缓存 中有没有被解析过的这个域名对应的ip地址;如果没有,搜索操作系统的DNS缓存表;若没有搜索操作系统C盘下的hosts文件中有没有这个域名对应的ip地址;如果都没有,则在本地DNS服务器查询自己的DNS缓存;如果没有,则进行迭代查询。将本地DNS服务器IP返回给操作系统,并缓存IP

2. 封装HTTP请求数据包

3. 封装TCP请求数据包;

4. 建立TCP连接(3次握手);

5. 参数从客户端传递到服务器端

6. 服务器端得到客户端参数之后,进行相应的业务处理,再将结果封装成HTTP包,返回给客户端;

7. 服务器端和客户端的交互完成,断开TCP连接(4次挥手);

8. 浏览器通过自身执行引擎,渲染并展示最终结果给用户。

4. 应用层重点协议 

4.1 DNS 

DNS域名解析流程:

1. 先检查浏览器中的DNS缓存,如果浏览器中有对应的记录会直接使用,并完成解析。

2. 如果浏览器没有缓存,会去操作系统进行查询是否有缓存(各个浏览器的缓存信息),如果查询到记录就直接返回IP地址 ,完成解析。

3. 如果操作系统中没有DNS缓存,就去查看本地host文件,host文件一般位于"C:\Windows\System32\drivers\etc\hosts",如果host中有记录,就可以直接使用。

4. 如果本地host 文件没有相应的记录,会请求本地的DNS服务器,本地服务器一般是由本地网络服务商(移动、电信)提供。

5. 如果本地DNS服务器没有相应的记录,就回去根域名服务器查询(目前,全球有13个根域名服务器)。

4.2 NAT

 NAT解决ip地址数量不足的问题。将私有的IP转为全部的IP,即就是将私有IP和全局IP相互转化的技术。(全局IP要求唯一,但是私有IP不需要,因此,在不同的局域网中出现相同的私有IP是完全不影响的)。NAT是解决IP地址不够用的主要手段,是路由器的重要功能。

4.3 NAPT

 如果在局域网中,多个主机同时访问一个外网服务器,那么这个时候,服务器返回给主机的数据中,目的IP都是一样的,NAT路由器不知道将这个数据报传给哪个局域网的主机,此时NAPT可以解决这个问题:IP + 端口号

NAT:网络地址的转换

NAPT:网络地址 + 端口 的转换

NAT 和 NAPT 都是地址的转换,两者的区别在于,NAT是一对一的转换,NAPT是多对一的转换。即就是说,NAT是一个内部地址转换成一个外部地址进行通信,而NAPT是多个内部地址使用同一个地址及不同的端口转换成外部地址来进行通信的。NAPT不仅转换IP包中的IP地址,还对IP包中的TCP和UDP的port进行转换。

4.4 HTTP

 HTTP :超文本传输协议,它用于传输客户端和服务器端的数据。

HTTP存在的问题:

1. 使用明文通讯,内容可以被窃听。

2. 不验证通讯对方的真实身份,可能会遭到伪装。

3. 无法证明报文的完整性,容易被篡改。

因此,使用 HTTPS 来替代 HTTP。

4.5 HTTPS 

 HTTPS 是在 HTTP 的协议基础上添加了加密机制SSL 或者 TLS。

HTTPS  = HTTP + 加密 + 认证 + 完整性保护

4.5.1 解决信任问题

信任问题也就是身份效验问题,如果不解决身份效验问题,可能会出现中间人攻击。 

 HTTPS解决信任问题采用的是数字证书的解决方案。就是在服务器创建之初,会先向第三方平台申请一个可靠的证书,然后再客户端访问时,服务器端先给客户端传一个数字证书,表明自己是一个可靠的网站,而不是“中间人”。浏览器负责效验和核对数字证书的有效性,如果证书有问题,客户端会立即停止通讯,没问题才执行后续的流程。

4.5.2 解决明文传输和完整性问题

由于通讯双方是明文通讯的 ,及时解决了信任问题,仍然会存在通讯内容被监听的风险,此时我们可以对信息进行加密来解决信息暴露的问题。

加密的分类:

         对称加密 和 非对称加密

对称加密:

在对称加密中,有一个共享秘钥,服务器端和客户端共享这个秘钥。通过这把共享秘钥可以实现信息的加密和信息的解密。它的特点就是,加密和解密速度快。但因为是共享秘钥,一旦共享秘钥被截获,就又出现信息泄露的问题了。

非对称加密:

在非对称加密中,有一对秘钥:公钥和私钥。可以使用公钥加密信息,但是公钥不能解密信息,使用私钥可以解密信息。它的特点是,服务器端保存私钥,不对外暴露,只将公钥发送给客户端,而其他人即使拿到公钥也解密不了加密的信息,所以此方法更安全,但是非对称加密的执行速度比较慢。

 因此,HTTPS 中即使用了对称秘钥,也使用了非对称加密。

4.5 3(MS)浏览器和客户端使用 HTTPS 交互的流程: 

1. 客户端使用HTTPS访问服务器端

2. 服务器端返回数字证书,以及使用非对称秘钥,生成一个公钥和私钥,将公钥返回给客户端。

3. 客户端验证证书是否有效,如果无效终止访问,如果有效:

        a. 使用对称加密生成一个共享秘钥;

        d. 使用对称加密的 共享秘钥 加密数据;

        c. 使用非对称加密的公钥 加密 这个对称加密产生的共享秘钥。

4. 将加密的信息发送到服务器端。

5. 服务器端先用 私钥 打开加密后的 对称秘钥,再用 对称秘钥 打开加密的数据。

6. 之后,就用对称秘钥进行交流。

5. 传输层重点协议

5.1 TCP 协议

TCP :传输控制协议。

TCP/IP知识点总结_第10张图片

 /目的端口号:表示数据是从哪个进程来,到哪个进程去;

4TCP 首部长度:表示该 TCP 头部有多少个 32 bit (有多少个 4 字节);所以 TCP 头部最大长度是 15 * 4 = 60
6位标志位:
        1. URG:是否是紧急的数据,为1表示是紧急数据。
        2. ACK : 进行确认应答,为1表示确认收到。
        3. PSH:要求应用程序立即从TCP缓冲区中把数据拿走。1
        4. RST:对方要求重新建立连接。1
        5. SYN:一台给另外一台服务器说建立连接。1
        6.  FIN:通知对方,本端要关闭了,断开连接。1
16位校验和:发送端填充, CRC 校验。接收端校验不通过,则认为数据有问题。
16 位紧急指针:标识哪部分数据是紧急数据;

5.2 TCP 原理(8大特性)

5.2.1 确认应答机制(安全机制)

即就是ACK。告诉发送者,我已经收到了哪些数据;下一次你从哪里开 始发。

TCP/IP知识点总结_第11张图片

5.2.2 超时重传机制(安全机制)

 主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B;

如果主机A在一个特定时间间隔内没有收到B发来的确认应答,就会进行重发;

TCP/IP知识点总结_第12张图片

 如果,由于网络抖动或者是别的因素,主机A一直未收到B发来的确认应答,也可能是因为ACK丢失了;因此主机B会收到很多重复数据。那么TCP协议需要能够识别出那些包是重复的包,并且把重复的丢弃掉。

 这时候我们可以利用序列号,就可以很容易做到去重的效果。

TCP/IP知识点总结_第13张图片

 超时重传的时间确定:

超时时间过长,会影响重传的效率;如果太短,会频繁的发送重复的包。

这个时间的长短是随着网络环境的不同,有所差异。

默认的超时重传时间是500ms,每次重发的超时时间是500ms的整数倍。(500、1000、2000...)

累积到一定的中穿刺术,TCP会认为网络或者主机出现异常,会强制关闭连接。

5.2.3 连接管理机制(安全机制)

 在正常的情况下,TCP要经过三次握手建立连接,四次挥手断开连接。

3次握手:

TCP 之所以要进行3次握手,是因为TCP双方是全双工的。即就是说,任何一端不仅是发送端,也是接收端,既要有发送的能力,又要有接收数据的能力。

A与 B进行通讯:

A先给B发送数据,询问对方可以接收到自己的信息吗?这是第一次挥手。

接着,B给A回应说自己可以收到信息,询问A可以接受到自己的信息吗?。这是第二次挥手。

最后,A说可以之后,说明可以正常建立连接,收发数据可以执行了。这是第三次挥手。

TCP/IP知识点总结_第14张图片

TCP/IP知识点总结_第15张图片

三次握手机制:

第一次握手:客户端请求建立连接,向服务器端发送一个同步报文(SYN = 1),同时选择一个随机数seq = x 作为 初始序列号,并进入 syn-sent 状态,等待服务器确认。

第二次握手:服务器端收到连接请求报文之后,如果同意建立连接,则向客户发送同步确认报文(SYN = 1, ACK = 1),确认号为ack = x + 1, 同事悬着一个随机数seq = y 作为初始序列号, 次数服务器进入syn-recv 状态;

第三次握手:客户端收到服务端的确认后,向服务器发送一个确认报文(ACK = 1),确认号为ack =  y + 1, 序列号为seq = x + 1, 客户端和服务器端进入established 状态,完成三次握手。

 4次挥手:

TCP/IP知识点总结_第16张图片

TCP/IP知识点总结_第17张图片

 

5.2.4 滑动窗口(效率机制)

 在上面稳定的基础上,保证效率。

对每一个发送的数据段,都要给一个 ACK 确认应答。收到 ACK 后再发送
下一个数据段。这样做有一个比较大的缺点,就是性能较差。尤其是数据往返的时间较长的时候。
此时数据是一条一条发送的,改成一次发送多条数据,效率会提高。

TCP/IP知识点总结_第18张图片

TCP/IP知识点总结_第19张图片

操作系统内核为了维护这个滑动窗口,需要开辟 发送 缓冲区 来记录当前还有哪些数据没有
应答;只有确认应答过的数据,才能从缓冲区删掉。

TCP/IP知识点总结_第20张图片

当某一段报文段丢失之后,发送端会一直收到 1001 这样的ACK,就像是在提醒发送端 "我想
要的是 1001" 一样;
如果发送端主机连续三次收到了同样一个 "1001" 这样的应答,就会将对应的数据 1001 -
2000 重新发送;
这个时候接收端收到了 1001 之后,再次返回的ACK就是7001了(因为2001 - 7000)接收端
其实之前就已经收到了,被放到了接收端操作系统内核的接收缓冲区中;

5.2.5 流量控制(安全机制)

接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发 送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。
接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 "窗口大小" 字段,通过ACK端通知
发送端;
窗口大小字段越大,说明网络的吞吐量越高;
接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端;
发送端接受到这个窗口之后,就会减慢自己的发送速度;
如果接收端缓冲区满了,就会将窗口置为0;这时发送方不再发送数据,但是需要定期发送
一个窗口探测数据段,使接收端把窗口大小告诉发送端。
TCP首部中,16位窗口字段 存放了窗口 大小信息,通过这个它告诉发送端窗口的大小

5.2.6 拥塞控制(安全机制)

 如果在刚开始阶段就发送大量的数据,可能引发问题。有些计算机可能网络状态目前比较拥挤,此时发送大量的数据,就会发生拥塞。

TCP 引入 慢启动 机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据。
" 慢启动 " 只是指初使时慢,但是增长速度非常快。

TCP/IP知识点总结_第21张图片

此处引入一个概念程为拥塞窗口
发送开始的时候,定义拥塞窗口大小为1;
每次收到一个ACK应答,拥塞窗口加1;
每次发送数据包的时候,将拥塞窗口和接收端主机反馈的窗口大小做比较,取较小的值作为
实际发送的窗口;

为了不增长的那么快,因此不能使拥塞窗口单纯的加倍。
此处引入一个叫做慢启动的阈值
当拥塞窗口超过这个阈值的时候,不再按照指数方式增长,而是按照线性方式增长。 
TCP 开始启动的时候,慢启动阈值等于窗口最大值;
在每次超时重发的时候,慢启动阈值会变成原来的一半,同时拥塞窗口置回 1

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

5.2.7 延迟应答(效率机制)

 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小。

假设接收端缓冲区为1M。一次收到了500K的数据;如果立刻应答,返回的窗口就是500K;
但实际上可能处理端处理的速度很快,10ms之内就把500K数据从缓冲区消费掉了;
在这种情况下,接收端处理还远没有达到自己的极限,即使窗口再放大一些,也能处理过来;
如果接收端稍微等一会再应答,比如等待200ms再应答,那么这个时候返回的窗口大小就是
1M;

窗口越大,网络吞吐量就越大,传输效率就越高 。

 不是所有的包都会延迟应答

1. 每个N个包应答一次。(数量限制)

2. 超过最大延迟时间就应答一次。(时间限制)

5.2.8 捎带应答(效率机制)

在延迟应答的基础上,我们发现,很多情况下,客户端服务器在应用层也是 " 一发一收 " 的。
当客户端给服务器端发送一个信息,服务器端给客户端回一个信息之后,ACK可以跟这个信息一块发送给客户端,即捎带应答。

5.3 TCP其他特性

5.3.1 TCP是面向字节流 

由于TCP的传输是以流的形式进行的,而流数据是没有明确的开始和结束标识的,因此出现了粘包问题和半包问题。

存在粘包问题半包问题

 比如说,发送端发送10次的消息,接收端在第5次接收的消息中,将第6次的消息顺带过来了,一次性读取了两条信息。这就是粘包问题。而对第六次的消息来说,它缺失一段消息,这是半包问题。

解决粘包问题和半包问题:

使用特殊字符作为结束标识、有一个固定大小、封装请求协议。

5.3.2 缓冲区

 既有发送缓冲区,又有接收缓冲区。

5.3.3 大小限制

5.4 TCP异常情况

进程终止:进程终止会释放文件描述符,仍然可以发送FIN。和正常关闭没有什么区别。

机器重启:和进程终止的情况相同。

机器掉电/断网:

接收端认为连接还在,一旦接收端有写入操作,接收端发现连接已经不在了,就
会进行 reset 。即使没有写入操作, TCP 自己也内置了一个保活定时器,会定期询问对方是否还在。如果对方不在,也会把连接释放。

5.5. UDP协议

5.5.1 UDP 协议端格式

TCP/IP知识点总结_第22张图片

16位UDP长度:表示整个数据报(UDP首部+UDP数据)的最大长度;
如果校验和出错,就会直接丢弃;

5.5.2 UDP的特点

1. 无连接

只需要知道对方端口的IP和端口号,就可以直接传输,不需要建立连接。

2. 不可靠

没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方, UDP 协议层也不会给应用层返回任何错误信息。

3. 面向数据报

应用层交给 UDP 多长的报文, UDP 原样发送,既不会拆分,也不会合并。

4. 缓冲区 

UDP只有接收缓冲区,没有发送缓冲区。

5. 大小受限

UDP 协议首部中有一个 16 位的最大长度。也就是说一个 UDP 能传输的数据最大长度是 64K (包含 UDP 首部)。

TCP特点:有链接、可靠、面向字节流、有发送缓冲区和接受缓冲区。

5.2.3 TCP和UDP的区别 

 TCP/IP知识点总结_第23张图片

6. 网络层重点协议

6.1 IP 协议

协议头格式:

TCP/IP知识点总结_第24张图片

4位版本号(version :指定 IP 协议的版本,对于 IPv4 来说,就是 4
4位头部长度(header length IP 头部的长度是多少个 32bit ,也就是 length * 4 的字节
数。 4bit 表示最大的数字是 15 ,因此 IP 头部最大长度是 60 字节。
8位服务类型(Type Of Service 3 位优先权字段(已经弃用), 4 TOS 字段,和 1 位保留 字段(必须置为0 )。 4 TOS 分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet 这样的应用程序,最小延时比较重要;对于ftp 这样的程序,最大吞吐量比较重要。
16位总长度(total length IP 数据报整体占多少个字节。
16位标识(id :唯一的标识主机发送的报文。如果 IP 报文在数据链路层被分片了,那么每
一个片里面的这个 id 都是相同的。
3 位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。
第二位置为 1 表示禁止分片,这时候如果报文长度超过 MTU IP 模块就会丢弃报文。第三位
表示 " 更多分片 " ,如果分片了的话,最后一个分片置为 1 ,其他是 0 。类似于一个结束标记。
13位分片偏移(framegament offset :是分片相对于原始 IP 报文开始处的偏移。其实就是
在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,
除了最后一个报文之外,其他报文的长度必须是 8 的整数倍(否则报文就不连续了)。
8位生存时间(Time To LiveTTL :数据报到达目的地的最大报文跳数。一般是 64 。每次
经过一个路由, TTL -= 1 ,一直减到 0 还没到达,那么就丢弃了。这个字段主要是用来防止出
现路由循环。
8 位协议:表示上层协议的类型。
16 位头部校验和:使用 CRC 进行校验,来鉴别头部是否损坏。
32位源地址和32 位目标地址:表示发送端和接收端。

7. 数据链路层重点协议

7.1 以太网 

如以太网中的网线必须使用双绞线;传输速率有 10M 100M 1000M 等。

7.2 以太网帧格式

TCP/IP知识点总结_第25张图片

源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址),长度是 48 位,是在网卡出厂时固
化的;
帧协议类型字段有三种值,分别对应 IP ARP RARP
帧末尾是 CRC 校验码。

7.3 MTU

MTU 相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层产生的限制。

以太网帧中的数据长度规定最小 46 字节,最大 1500 字节, ARP 数据包的长度不够 46 字节,
要在后面补填充位;
最大值 1500 称为以太网的最大传输单元( MTU ),不同的网络类型有不同的 MTU
如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的 MTU 了,则需要对
数据包进行分片( fragmentation );
不同的数据链路层标准的 MTU 是不同的;

7.3.1 MTU 对 IP 协议 影响

由于数据链路层 MTU 的限制,对于较大的 IP 数据包要进行分包。
将较大的 IP包分成多个小包,并给每个小包打上标签; 每个小包 IP 协议头的 16 位标识( id) 都是相同的; 每个小包的 IP 协议头的 3 位标志字段中,第 2 位置为 0 ,表示允许分片,第 3 位来表示结束标记 (当前是否是最后一个小包,是的话置为 1 ,否则置为 0); 到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层; 一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP 层不会负责重新传输数 据;

7.3.2 MTU 对 UDP 协议 影响

一旦 UDP 携带的数据超过 1472 1500 - 20 IP 首部) - 8 UDP 首部)),那么就会在网络
层分成多个 IP 数据报。
这多个 IP 数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果
UDP 数据报在网络层被分片,整个数据被丢失的概率就大大增加了。

7.3.3 MTU对于TCP协议的影响

TCP 的一个数据报也不能无限大,还是受制于 MTU TCP 的单个数据报的最大消息长度,称
MSS Max Segment Size );
TCP 在建立连接的过程中,通信双方会进行 MSS 协商。
最理想的情况下, MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于
数据链路层的 MTU )。
双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值。
然后双方得知对方的 MSS 值之后,选择较小的作为最终 MSS
MSS 的值就是在 TCP 首部的 40 字节变长选项中( kind=2 );

MTU 和 MSS 的关系:

TCP/IP知识点总结_第26张图片

MTU = IP 头部长度 + TCP 头部长度 + MSS 

 7.4 APR协议

ARP 不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。

7.4.1 ARP协议的作用

ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系。

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬
件地址;
数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不
符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址;

你可能感兴趣的:(Java,JavaEE,tcp/ip,网络,网络协议)