说明:本文是我对TCP/IP知识的总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习。
1.TCP/IP出现历史背景
- 20世纪60年代,很多大学和研究机构开始着力于新通信技术,在70年代前半叶,ARPANET一个研究机构研发出了TCP/IP。
- 有了TCP/IP,为了保障通信的可用性,制定了一些标准协议,记录在RFC中。
2.TCP/IP协议分层
- 为什么分层:分层后,每一层只需要关注该层的数据传输和处理,这样各层在组合形成完整的通信路径,扩展性也比较强。
- 各层之间通信每个分层中,都会对发送的数据附加一个首部
- OSI模型在TCP/IP协议族的各层间对数据的处理
应用层:编辑发送数据
表示层:对发送的数据进行编码处理
会话层:建立通信连接(真正建立连接是在TCP传输层当中)
传输层:建立通信连接(TCP首部包含源端口和目标端口)
网络层:IP模块处理(IP首部包含接收端IP地址和发送端IP地址)
数据链路层:寻找下一跳的路由地址(MAC地址)。
3.数据链路层
- 数据链路层协议定义了通过通信媒介互相连接的设备之间的传输规范(通信媒介:电缆、光纤、电波、红外线)
- MAC地址:mac地址长48比特,具有唯一性(在多个虚拟机中可以自己设置MAC地址,不保证唯一)。
- 以太网交换机是持有多个端口的网桥,可以连接两个不同的分段(192.168.1.1/192.168.2.1)。交换机中存有转发表,通过目标MAC地址就能知道下一跳的节点(交换机、路由器、PC)。
3.1以太网
- 以太网可以看作局域网的一种形式,它的帧格式组成如下
以太网前导码:14个字节组成,分别是6个自己的目标MAC地址和6个字节源MAC地址以及2字节上层协议类型。
以太网帧体格式:前导码+数据+FCS(4字节的帧检验序列)
3.2PPP(点对点协议)
- PPP主要功能包含两个协议:一个是不依赖于上层的LCP(Link Control Protocol),另一个是依赖上层的NCP协议(Network Control Protocol),如果上层协议为IP此时的NCP也叫做IPCP
- 通常通过PPP连接时,需要进行用户名和密码验证,并且对通信两端进行双验证。
3.3ATM(Asynchronouns Transfer Mode)
- 面向无连接的一种数据链路层,传统使用电话进行通话时,需要事先向交换机发出一个信令要求,建立交换机与通话对端连接,而ATM与传统电话不同,它允许同时与多个端建立通信连接。一个信元只能发送固定的48字节数据。以太网中一个帧最大传输1500字节,FDDI(光纤分布式数据接口)可以传输4352个字节。
4.IP协议(网络层)
- 负责将数据包发送给最终目标计算机。
- 数据链路层主要作用是在互联同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层(可以跨越不同的数据链路)最终实现两个计算机节点的通信。
- IP分为三大作用模块:IP寻址、路由、IP分包组包。
- IP是实现多个数据链路层之间通信的协议。各个链路层最大传输单元都不同(MTU),以太网中是1500字节,FDDI中4352字节,而IP的上一层可能要求传输比这些MTU更多的字节数据,这时候就必须在线路上传送比包还要小的MTU,就需要进行IP分片处理。分片的大小需要通过路径MTU发现来决定,步骤如下:
1.发送时,设置IP首部的分片标志位置为不分片。路由器丢包。
2.由ICMP通知下一次MTU大小。
3.根据TCP重发处理,数据报会被重新发送。TCP负责将数据划分成IP层不会再被分片的粒度以后传给IP层,IP层不再做分片处理。
4.不需要重组。数据被原样发送给接收端主机的TCP层。
- IP地址主要由网络标识和主机标识组成,地址类型可划分为A类(0.0.0.0-127.0.0.0),B类(128.0.0.0-191.255.0.0),C类(192.0.0.0-239.255.255.0),D类地址(224.0.0.0-239.255.255.0)。IP地址的网络标识和主机标识不受限于地址类型,而是通过子网掩码的识别码通过子网网络地址划分出比A\B\C更小粒度的网络(172.20.0.0/16)。
- 由于IP地址资源有限,为了能够合理利用资源,划分了私有网段的IP地址。私有的IP需要于全局IP通信,则需要NAT技术实现IP转换。
【10.0.0.0-10.255.255.255】(10/8) A类
【172.16.0.0-172.31.255.255】(172.16/12) B类
【192.168.0.0-192.168.255.255】(192.168/16) C类
- 广播地址用于在同一个链路中互相连接的主机之间发送数据包,将IP地址中的主机地址部分全部设置为1。
- IPv4首部如下【引用网图】:
- 版本:IPv4为4,IPv6为6。
- 首部长度:表明IP首部大小。
- 区分服务:分为DSCP(差分服务代码点)用来进行质量控制;ECN(显式拥塞通告)用来报告网络拥堵情况作为IP上层协议,TCP也能控制网络拥塞,不过它是通过数据包实际的损坏情况来判断是否发生拥塞,然后这种方法并不能在数据包损坏之前减少数据包的发送所以引入ECN。
- 总长度:表示IP首部与数据部分合起来的总字节数。该字段16字节,最大长度为65535字节。
- 标识:用于分片重组,标识为是否为同一个分片中的数据。
- 标志:表示包被分片的相关信息。【第一位是0;第二位0代表可以分片,1代表不能分片;第三位为0代表最后一个分片包,1代表分片中段的包】
- 片偏移:用来标识被分片的每一个分段相对于原来数据的位置。
- 生存时间:TTL(表示它可以中转多少个路由器的意思)。
- 协议:表示IP首部的下一个首部属于哪个协议。
- 首部校验和:只校验数据报首部有没有被破坏。
注释: 同一个分片需要有源端口目标端口号,原IP目标IP地址,和上层协议共同决定是否一个分片。
4.1IP相关技术
- DNS,将域名转换成IP地址。
- ARP,通过IP地址来定位下一个应该接收数据分包的网络设备对应的MAC地址。通过广播形式来查找下一跳的节点。RARP是根据MAC地址定位大到IP地址的协议。
- ICMP,确认网络是否正常工作、以及遇到问题进行诊断。tracert www.baidu.com 查看访问百度经过的路由节点。
- DHCP,动态主机配置协议,用来分配IP地址,自动分配,不需要管理员手动输入。
DHCP服务器:为了检测分配的IP地址是否可用,在分配IP地址前DHCP发送ICMP回送请求包,确认没有返回应答。
DHCP客户端:针对从DHCP那里获取的IP地址发送ARP请求包,确认没有返回应答。
- NAT,将私有网络转换成全局网络访问节点资源,一定程度上解决了IPv4资源枯竭的问题。
- IP隧道,IPv4 IPv6进行转换通信的桥梁。通过隧道封装IP包。在网络层首部后面继续追加网络层首部的通信方法。
- IP多播,可用确认接收端是否存在,避免没有接收端而发送消息造成流量浪费。
- IP任播,主要用于报警电话110和消防电话119。DNS根域名服务器也是应用任播技术。
5.TCP/UDP(传输层)
- UDP使用的地方:
包总量较少的通信
视频、音频等多媒体通信
限定于LAN等特定网络中的应用通信
广播通信
-
TCP是面向有连接的可靠传输协议,实行顺序控制、或重发控制、流量控制、拥塞控制,而UDP不具有可靠的数据传输协议。
-
端口号,用来区分计算机中不同的程序,TCP/IP或者UDP/IP通信采用5个信息来识别是否是一个通信。分别是,源IP地址、目标IP地址、协议号、源端口、目标端口。
-
TCP通过检验和、序列号、确认应答、重复控制、连接管理以及窗口控制等实现可靠的传输。
-
TCP通过三次握手建立可靠的连接,在建立TCP连接的同时,也可以确定发送数据包的单位,称最大消息长度。发送数据时以段为单位,每次发送一个段进行一次确认应答处理,这样传输的缺点是,包的往返时间越长,通信性能越低,为了解决这个问题TCP引入了窗口这个概念,窗口大小就是指无需等待确认应答而可以继续发送数据的最大值,窗口大小由接收端主机决定,这样就能让发送端根据接收端的实际接收能力控制发送的数据量,也称流控制。
-
利用窗口提高速度,不再以一个段确认应答,而是以更大单位进行确认,窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。
-
窗口控制与重发控制,在使用窗口控制中,如果出现段丢失怎么办?首先我们先考虑确认应答未能返回的情况,这种情况下,数据已经到达对端,是不需要进行重发的,然而没有窗口的情况下需要重发,其次我们考虑某个报文段丢失的情况,如果接收到一个自己应该接收的序号以外的数据时,会针对当前为止收到的数据返回确认应答,而发送端主机如果连续三次收到同一个确认应答,那么就会重复数据。
-
拥塞控制:有了TCP窗口控制,收发主机不再以一个段为单位发送确认应答,也能连续发送大量数据包。当网络拥堵时候,如果发送一个较大量的数据,极有可能导致网络瘫痪,TCP为了防止出现这样的问题,在通信一开始会通过慢启动的算法得出数值,对发送数量进行控制。首先 为了在发送端调节所要发送的数据量,定义了一个叫做拥塞窗口的概念,在慢启动时,将这个拥塞窗口大小设置为1个数据段发送数据,之后每收到一次确认应答(ACK),拥塞窗口值加1,在发送数据包时,将拥塞窗口大小与接收端主机通知的窗口大小作比较,取其中小的值,发送比其还要小的数据量。
-
TCP首部结构如下【引用网图】:
-
序列号:指发送数据的位置,在建立连接和断开连接时发送的SYN包和FIN包虽然不携带数据,但是也会作为一个字节增加到对应的序列号。
-
确认应答号:指下一次应该收到的数据的序列号,实际上它是指已收到的确认应答号减一为止的数据。
-
数据偏移量:表示TCP所传输的数据部分应该从TCP包的哪个位置开始计算,也可以把它看作TCP首部的长度。
-
控制位:【URG(Urgent Flag 表示包中有需要紧急处理的数据)、ACK(Acknowledgement Flag 确认应答的字段变为有效)、PSH(Push Flag 表示将接收到的数据立刻传给上层应用协议)、RST(Reset Flag 该位置为1时,代表连接中出现异常必须强制断开连接)、SYN(Synchronize Flag SYN为1表示希望建立连接)、FIN(Finish Flag 为1代表之后不再发送数据,希望断开连接)】
-
校验和:TCP的校验和与UDP相似,区别在于TCP的校验和无法关闭。TCP和UDP一样在计算校验和的时候使用TCP伪首部。使用校验和的目的【有噪声干扰的通信途中如果出现错误,可以由数据链路层的FCS(帧检验序列)检查出来。路由器发生故障时候,经过该路由器的包、协议首部或数据就有可能发生破坏,这时候如果TCP/UDP提供校验和计算就可以判断首部或数据是否被破坏。】
6.路由协议
- 路由器,根据路由控制表进行转发数据。路由控制表可通过静态路由和动态路由生成。
- 动态路由,相邻路由器发送自己已知网络连接信息,依次接力传输。
- 路由协议有IGP(内部网关协议)、EGP(外部网关协议)
- 路由算法,距离向量算法(路由器之间互换目标网络的方向以及距离信息,并以此信息为基础制作路由控制表)和链路状态算法(路由器了解整体连接状态的基础上生成的路由控制表)。
7.应用层协议
- TELENT(远程登录)、SSH(加密远程登陆系统)、FTP(文件传输)、SMTP/POP3(电子邮件发和收协议)
- SNMP(网络管理,SNMP中,管理端叫做管理器[可以检查和修改设置],被管理端叫做代理[路由器、交换机])