TCP/IP
1. 什么是TCP/IP?
TCP/IP 是通信协议的统称。如: TCP、IP、HTTP等协议的集合
2. 什么是协议?
协议即是规则,比如:国家规定语言标准为普通话,那么大家都会遵守这个标准,无论遇到什么地区的人都可以通过普通话交流。如果没有这个标准,就会发生每个地区都有自己的语言,各个地区语言不通,无法交流,导致闭环,当前地区只能和本地区的人进行沟通。
2.1 网络协议的制定
ISO/组织制定国际标准OSI(open systems interconnection),但是目前OSI标准并未普及,主要原因是因为OSI标准过度理想化,制定的协议不具备实用性。。
TCP/IP由IETE(Internet Engineering Task Force)建议的,并且大部分提议标准在提议前就会投入使用,使得最终制定出来的协议更具备实用性。更多TCP/IP协议规范参考: https://www.rfc-editor.org/rfc
2.2 协议示意图
3. TCP/IP通信示例
3.1 发送数据过程
3.1.1 应用模块
应用将数据进行编码,数据需要附带TCP首部,首部源端口号和目标端口号、序号(告诉接收端那部分是数据)、校验和(判断数据是否遭到破坏)。
3.1.2 TCP模块
TCP根据应用的指示,负责建立链接、发送数据、以及断开链接。(为了实现这一功能应用必须添加TCP首部)
3.1.3 IP模块
IP将TCP传过来的TCP首部和TCP数据合起来作为自己的数据,并在TCO首部的前端加上自己的IP首部,首部包含了发送方IP和接收方IP, 紧随IP首部还有用于判断后面的数据是TCP还是UDP的信息。
3.1.4 网络接口(以太网驱动)处理
根据IP传来的数据包,加上以太网首部并进行发送处理。以太网首部包含了。接收方MAC地址,发送端MAC地址
以及标志以太网类型的以太网数据的协议。同时还会设置FCS(frame check sequence) 由硬件计算,添加到最后。主要为了防止数据被破坏的校验码。
4. 数据链路
数据链路指OSI参考模型中的数据链路层,有时候也指以太网、无线局域网等通信手段。
在数据链接层中通过"帧"的块,进行数据传输。
4.1 MAC地址
4.1.1 作用
MAC地址主要用于识别数据链路中互连的节点。
4.1.2 构成
MAC地址长48比特,并且在设备出厂前就会烧录在ROM中,因此在这种情况下任何一个网卡对应的MAC地址都是唯一的,全世界内都不会出现重复。除特殊情况: 虚拟机的虚拟网卡,因为可以自己设置或者生成MAC地址无法保证MAC地址的唯一性。
5. IP协议
IP即网络协议, TCP/IP的核心就是网络层,而这一层主要由IP(Internet Protocol), ICMP(Internet Control Message Protocol) 两个协议组成。
-
网络层主要作用
实现终端节点之间的通信,即**“点对点”**通信
-
网络层与数据链路层的关系
数据链路层主要负责区间之间的通信传输。
网络层主要负责点对点的通信。
网络层与数据链路层的关系相当于快递与快递公司的关系,快递会告诉快递公司我要去哪里,快递公司负责将快递送达目的地。如果我们只知道目的地但是没有快递公司也无法将快递送达,反之只有快递公司没有快递,也不行。
-
IP数据面向无链接型
原因: 简化,提速。
理由: 面向连接对比面向无链接处理过程相当复杂,还需要管理每个链接,同时每次通信前需要事先建立链接,会导致处理速度降低。
5.1 IP路由控制
路由控制保证了数据能够发送到最终目标地址的功能,即使网络非常复杂,也可以通过路由控制确定到达目标地址的通路。一旦路由控制出现异常,数据可能“迷失”,无法到达目标地址。因此一个数据包之所以能够成功到达目标地址,全靠路由控制。
5.1.1 路由控制过程
主机发送数据包时,并不知道数据包的一个完整传输路径,而且根据区间进行询问然后跳转。
主机根据路由控制表,数据包会先到达路由器A,路由器A会告诉数据包的下一个要去的地方,路由器B接到数据包后也会告诉数据包下一个要去的地方,直到最终到达目标地址。
5.2 DNS
5.2.1 什么是DNS?
DNS就是将域名转换为IP的,因为IP记忆相对困难,而电脑通信又必须用IP,所以人类发明了域名,让我们可以记住baidu.com、taobao.com这种还算能记得住的域名。然后通过DNS,将这些域名转换为电脑需要的IP。
5.2.2 域名级别
.代表根域名
.com这种是顶级域名,也叫一级域名
baidu.com这种叫二级域名, www.baidu.com这种叫三级域名,依次类推。
5.2.3 解析过程
用户解析123.abc.qq.com.cn网址,首先会检查本地是否具有缓存,有就直接返回,没有就查看是否有abc.qq.com.cn的DNS记录,如果有则解析,如果没有,就查看qq.com.cn的DNS的记录,如果有则解析,没有就去查看com.cn的DNS,还没有就去看有无cn的DNS,如果连cn的NS记录都没有,才去问根。
5.3 ARP
ARP主要作用是通过IP地址转换为MAC地址。
-
实现方式
通过广播发送一个ARP请求包,目标主机接收到请求保存源主机的MAC地址并将自己的MAC地址返回给源主机。
为避免多次请求造成不必要的网络流量,通常主机会将MAC地址进行缓存,并设置过期时间。
查看本机IP-MAC地址映射缓存
arp -a
5.4 ICMP
-
主要作用
确认IP包是否成功送达目标地址,通知在发送过程中IP包被废弃的具体原因,改善网络设置等。
5.5 DHCP
-
主要作用
自动配置主机IP地址、统一管理IP地址分配
5.6 NAT
-
主要作用
内网IP转公网IP,并与外部进行通信
6 TCP
6.1 特点及其目的
特点:通过校验和、***、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
目的:保证使用IP数据包的可靠性传输
6.2 TCP的可靠性
为了确保链接的可靠性,TCP通过***与确认应答机制提高可靠性
6.3 超时重发
当超过一定时间尚未接收到消息确认,则重新发送消息
-
如何确定超时重发时间
最理想的是找到一个最小时间,能够确保“应答一定能在这个时间内返回”, 具体的时间根据每次消息往返时间与偏差进行计算 -
一直超时无应答怎么办?
数据被重发之后若还是收不到确认应答,则进行再次发送。此时,等待确认应答的时间将会以2倍、4倍的指数函数延长。
此外,数据也不会被无限、反复地重发。达到一定重发次数之后,如果仍没有任何确认应答返回,就会判断为网络或对端主机发生了异常,强制关闭连接。并且通知应用通信异常强行终止。
6.4 数据传输
两者在建立链接时会告诉对方自己的“最大消息长度”(MSS: Maximun Segment Size), 然后选取两者最小的MSS进行使用。
6.4.1 窗口控制与重发控制
TCP以1个段为单位,每发一个段进行一次确认应答处理,这样传输虽然保证数据能够完整的发送,但是包的往返时间越长通信性能越低。
为了解决这个问题,TCP引入了窗口概念,即使在往返时间较长的情况下,它也能控制网络性能的下降。
每次发送数据不再以段为单位,而是以更大的单位进行确认,如:发送一个段后不必一直等待应答,而是继续发送。
窗口大小就是指无需等待确认应答就可以继续发送数据的最大值。具体确认由接收端的缓存区大小进行确认。
-
报文丢失处理
如果丢失的是序号较小应答数据,但是序号较大的数据确认应答,则认为无需重发。
如果丢失的是传输数据方,如果出现三次重复应答,则进行数据重发
6.5 拥塞控制
为避免通信刚开始就发送大量的数据包,可能导致其他问题,如: 网络堵塞。
为了防止问题出现,TCP采用的是一种慢启动的算法,对发送数据量进行控制。
在慢启动的时候,将这个拥塞窗口的大小设置为1个数据段(1MSS)发送数据, 之后每收到一次确认应答( ACK),拥塞窗口的值就加1。在发送数据包时,将拥塞窗口的大小与接收端主机通知的窗口大小做比较,然后按照它们当中较小那个值,发送比其还要小的数据量。如果重发采用超时机制,那么拥塞窗口的初始值可以设置为1以后再进行慢启动修正。有了上述这些机制,就可以有效地减少通信开始时连续发包导致的网络拥堵,还可以避免网络拥塞情况的发生。