参考《图解TCP/IP》。
OSI参考模型
OSI参考模型对通信中必要的功能做了归纳。OSI协议是以OSI参考模型为基础界定了每个阶层的协议和每个阶层之间接口相关的标准。OSI协议是为了让异构的计算机之间能够相互通信,由ISO和ITUT推进其标准化的网络体系结构。
NO. | 分层名称 | 功能 | 功能概览 |
---|---|---|---|
7 | 应用层 | 针对特定应用的协议 | 针对每个应用的协议,如电子邮件、远程登录、文件传输。【APP协议】 |
6 | 表示层 | 设备固有数据格式和网络标准数据格式的转换 | 接收不同表现形式的信息,如文字流,图像,声音。【数据流】 |
5 | 会话层 | 通信管理。负责建立和断开通信连接(数据流动的逻辑通路)。管理传输层以下的分层 | 两台计算机之间何时建立连接,何时断开连接以及保持多久的连接。 |
4 | 传输层 | 管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠地传送到目的地址) | 在两个节点传输过程中是否有数据丢失【TCP、UDP】 |
3 | 网络层 | 地址管理与路由器选择 | 两个节点经过哪个路由器能够传递到目标地址【IP】 |
2 | 数据链路层 | 互联设备之间传送和识别数据帧 | 如数据帧与比特流之间的转换,数据包分段发送,互联设备之间使用mac地址进行区分。目的是为了识别连接到同一传输介质上的设备。 |
1 | 物理层 | 以0,1代表电压的高低。界定连接器与网线的规格 | 比特流与电子信号之间的切换 |
双方通信,发送方从第7层到第1层由上向下按照顺序传输数据。接收端从下到上传输数据。
传输方式的分类
面向有连接性、面向无连接性
- 面向有连接型:在发送数据之前,需要在收发主机之间连接一条通信线路。必须在通信前后,专门进行建立和断开连接的处理。如果与对端之间无法通信,就可以避免发送无谓的数据。【TCP】
- 面向无连接型:发送端可以在任何时候自由发送数据。接收端也永远不知道自己会在何时从哪里收到数据。在面向无连接的情况下,接收端需要时常确认自己是否收到了数据。【UDP】
电路交换与分组交换
- 电路交换中:交换机主要负责数据的 中转处理 。计算机先被连在交换机上,交换机与交换机之间由众多通信线路再继续连接。计算机之间在发送数据时,需要通过交换机与目标主机建立通信电路。 一台计算机在收发信息时会独占整个电路 ,其他计算机只能等待这台计算机处理结束之后才有机会使用这条电路收发数据。如果并发用户超过交换机之间的通信线路数,就意味着通信根本无法实现。
- 分组交换中:让连接到通信电路的计算机将所要 发送的数据分成多个数据包 ,按照一定的顺序排列之后分别发送。这样提高了通信线路的利用率。数据包的首部header写入了发送端与接收端的地址。发送端计算机将数据分组发送给路由器,路由器收到这些分组数据以后缓存到自己的缓冲区,然后再转发给目标计算机。(蓄积交换, FIFO)
在分组交换中,通信线路的速度可能会有所不同,根据网络拥堵的情况,数据到达目标地址的时间有长有短。另外,路由器的缓存饱和或溢出时,甚至可能会发生分组数据丢失、无法发送到对端的情况。
根据接收端数量分类
- 单播 Unicast 例如固定电话
- 广播 BroadCast 指将消息从一台主机发送给与值向量的所有其他主机。电视播放
- 多播 Multicast 电视会议
- 任播 Anycast 特定的多台主机中选出一台作为接收端的一种通信方式。任播从目标主机群众选择一台最符合网络条件的主机作为目标主机发送消息。通常,被选中的那台特定主机将返回一个单播信号,随后发送端主机会只跟这台主机进行通信。 【DNS根域名解析服务器】
地址
一个地址必须明确地表示一个主体对象。地址的唯一性。在广播,多播和任播通信中,通信接收端被赋予同一个具有唯一特性的地址,从而可以避免产生歧义。
地址的层次性
- mac地址由设备的制造商针对每块上网卡进行分别制定。虽然mac地址在某种程度上有一定的层次性,但对于寻找地址没有任何作用。【数据链路层使用地址】
- IP地址由网络号和主机号两部分组成。网络号相同,说明他们处于同一网段。通常处于同一网段的主机也都属于同一个部门或集团组织。【网络层使用】
网络传输中,每个节点会根据分组数据的地址信息,来判断该报文应该由哪个网卡发送出去。为此,各个地址会参考一个发出接口列表。MAC寻址中参考的这张表叫做地址转发表,而IP寻址所参考的为路由控制表。路由表中记录的ip地址是集中了之后的网络号。
网络传输中,每个节点会根据分组数据的地址信息,来判断该报文应该由哪个网卡发送出去。
网络构成的要素
设备 | 作用 |
---|---|
网卡 | 是计算机联网的设备(Network interface) |
中继器(Repeater) | 从物理层上延长网络的设备 |
网桥(Bridge)、2层交换机 | 从数据链路层上延长网络的设备 |
路由器(Router)、3层交换机 | 通过网络层转发分组数据的设备 |
4-7层交换机 | 数理传输层以上各层网络传输的设备 |
网关(Gateway) | 转换协议的设备 |
网卡:网络接口卡NIC,LAN卡
中继器:连接相同的通信媒介。但也有中继器可以完成不同媒介之间的转接工作,也可以提供多端口服务(集线器)。【电路交换】
网桥、2层交换机:能够识别数据链路层的数据帧,并将蛇蝎数据帧临时存储于内存,再重新生成信号作为一个全新的帧转发给相连的另一个网段。【分组交换】。以太网中经常使用的交换集线器Hub也属于网桥的一种,网桥根据mac地址进行处理。
路由器、3层交换机:路由器根据IP地址进行处理。网络层连接两个网络,并对分组报文进行转发的设备。
4-7层交换机:处理从传输层到应用层的数据,分析收发数据,并对其进行特定的处理。比如,为了通过同一个url将前端访问分发到后台多个服务器上,可以在这些服务器前端增加一个负载均衡器。
网关:将传输层到应用层的数据进行转换和转发的设备。网关不仅转发数据还负责对数据进行转换,通常会使用一个表示层或应用层网关,在两个不能直接通信的协议之间进行翻译,最终实现两者的通信。例子,互联网邮件与手机邮件之间的转换服务。此外,在使用www时,为了控制网络流量和处于安全的考虑,有时会使用代理服务器(Proxy Server)。这种代理服务器也是网关的一种,成为应用网关。有了代理服务器,客户端与服务器之间无需在网络层上直接通信,而是从传输层到应用层对数据和访问进行各种控制和处理。
不同层相关协议
网络层
IP:
- IP是跨越网络传送数据包,整个互联网都能收到数据的协议,在这期间网络使用IP地址作为主机的表示。
- IP还隐含着数据链路层的功能。通过IP,相互通信的主机之间不论经过怎样的底层数据链路都能够实现通信。
- 虽然IP也是分组交换的一种协议,但不具有重发机制。即使分组数据包未能到达主机端也不会重发。属于非可靠性传输协议。
ICMP:
- IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发生异常的通知。用来诊断网络的健康状况。
ARP(address resolution protocol):
- 从分组数据包的IP地址中解析出物理地址的一种协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
- 地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
传输层
TCP:
- 是一种面向有连接的传输层协议。可以保证两端通信主机之间的通信可达。TCP能够正确处理在传输过程中丢包、传输顺序乱掉等异常情况。此外,TCP还能够有效利用带宽,缓解网络拥堵。但为了建立与断开连接,有时他需要至少7次的发包首部,导致网络流量的浪费。
UDP:
- 面向无连接的传输层协议。UDP不会关注对端是否真的收到了传送过去的数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。
1 | **TCP UDP区别** |
应用层(会话层以上的分层)
WWW:
浏览器与服务端之间的通信所用协议为HTTP(HyperText Transfer Protocol)。数据格式主要是HTML
电子邮件E-mail
文件传输 FTP:
指将保存在其他计算机硬盘上的文件转移到本地的硬盘,或者将本地硬盘的文件传送到其他机器硬盘上。在FTP进行文件传输时会建立两个TCP连接,分别是发出传输请求时所要用到的控制连接和与实际传输数据时所要用到的数据连接。
远程登录TELNET与SSH
网络管理SNMP
TCP协议
分组数据包经过以太网的数据链路大致流程:包流动时,从前往后依次被附加了以太网包首部,ip包首部,tcp包首部已经应用于自己的包首部和数据。包尾则追加了以太网的包尾。每个包首部都至少会包含两个信息:一个是发送端和接收端地址,另一个是上一层的协议类型。
经过每个协议分层时,都必须有识别包发送端和接收端的信息。以太网用mac地址,IP协议用ip地址,TCP/UDP用 端口号 作为识别两端主机的地址。
数据接收处理:
- 主机收到以太网包,首先在包首部找到mac地址判断是否为发送给自己的包。
- 如果不是则丢弃数据。
- 如果是自己的包,在以太网包首部类型与确定以太网协议所穿过来的数据类型。如果以IP包,则将数据传给IP子程序,如果不是IP是ARP之类的协议,那么就把数据传给ARP处理。
- IP收到IP包首部及后边的数据部分后,做类似的处理。如果ip地址与自己的ip地址匹配,将后续数据tcp包或udp包传给后边的协议进行处理。
- TCP模块。
- 首先会计算校验和,判断数据是否破坏。
- 然后是否按照序号接受数据。
- 最后检查端口号,确定具体的应用程序。
- 数据接收完毕后,接收端发送一个确认回执给发送端。
- 如果这个回执未能到达发送端,那么发送端会认为接收端没有接受数据而一直反复发送。
- 数据被完成接受后会传给由端口号识别的应用程序。
- 接收端应用程序会直接接收发送端发送的数据。
tips:在TCP/IP协议中的服务端口(逻辑端口,即逻辑意义上用于区分服务的端口),端口号范围从0到65535。比如用于浏览网页服务的80端口,用于FTP服务的21端口。
TCP的三次握手四次挥手
如果SYN标志为1,说明是握手包。FIN标志为1,说明是挥手包。
窗口,占2个字节,窗口指的是发送本报文段的一方的接收窗口,不是自己的发送窗口,告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。进行“流量控制”。
TCP主要包括建立连接、数据传输、断开连接这三步。
三次握手建立连接:
- 第一次 :客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认
- 第二次 :服务器收到syn包,必须确认客户的syn(ack=x+1),同时自己也发送一个syn包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态
- 第三次 :客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
数据传输:
- 超时重传 :超时重传机制用来保证TCP传输的可靠性。每次发送数据包时,发送的数据报都有seq号,接收端收到数据后,会回复ack进行确认,表示某一seq 号数据已经收到。发送方在发送了某个seq包后,等待一段时间,如果没有收到对应的ack回复,就会认为报文丢失,会重传这个数据包。
- 快速重传 :接受数据一方发现有数据包丢掉了。就会发送ack报文告诉发送端重传丢失的报文。如果发送端连续收到标号相同的ack包,则会触发客户端的快速重传。比较超时重传和快速重传,可以发现超时重传是发送端在傻等超时,然后触发重传;而快速重传则是接收端主动告诉发送端数据没收到,然后触发发送端重传。
- 流量控制 :TCP滑动窗流量控制。TCP头里有一个字段叫Window,又叫Advertised-Window,这个字段是接收端告诉发送端自己 还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。 滑动窗可以是提高TCP传输效率的一种机制。
- 拥塞控制 :滑动窗用来做流量控制。 流量控制只关注发送端和接受端自身的状况 ,而没有考虑整个网络的通信情况。 拥塞控制,则是基于整个网络来考虑的 。考虑一下这样的场景:某一时刻网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,但是,重传会导致网络的负担更重,于是会导致更大的延迟以及更多 的丢包,于是,这个情况就会进入恶性循环被不断地放大。拥塞策略算法主要包括:慢启动,拥塞避免,拥塞发生,快速恢复。
四次挥手断开连接:
- 第一次挥手 :主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据。
- 第二次挥手 :被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
- 第三次挥手 :被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
- 第四次挥手 :主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。
1 | 1. 为什么是三次握手而不是两次握手: |
数据链路层
- 采用mac地址识别在数据链路中互联的节点。mac地址48bit,任何一个网卡的mac地址都是唯一。(当然全球范围内mac地址不总是唯一的,只要在一个数据链路中的mac地址不重复就没有问题。)
- 共享介质网络:多个设备共享一个通信介质的一种网络。设备之间使用同一个载波信道进行发送和接收,基本采用半双工通信(同一时间只能允许一个传输行为)。控制方式:争用方式和令牌传递方式。【典型:在无线数据链路中,如2.4GHz无线WiFi,同一时刻无线WiFi只能和一个设备进行通信。因此当设备增多的时候,每一个设备分得的资源就会极大的降低,导致网速降低。】
- 非共享介质网络(ATM、以太网的主流方式)。对介质采取专用的一种传输控制方式。在这种方式下,网络中的每个站直连交换机。由交换机负责转发数据帧。在此方式下,发送端和接收端并不共享通信介质,因此很多情况下采用全双工通信方式。通过交换机攻坚网络,从而使计算机与交换机端口之间形成一对一的连接。该方式还可以根据交换机的特性构建虚拟局域网进行流量控制VLAN。
以太网交换机就是持有多个端口的网桥(交换集线器)。他们根据数据链路层中的每个帧的目标mac地址,决定从哪个网络接口发送数据。这个要参考用来记录发送接口的转发表。当某个mac地址作为源地址的包由某一接口发出,就可以理解为该mac地址就是该接口的目标。这是一个自学过程。
IP网际传输协议
- 网络层的主要作用是实现终端节点之间的end-to-end通信。配有IP地址但不进行路由控制的设备成为主机。既配有ip地址又具有路由控制能力的设备叫做路由器。节点是主机和路由器的统称。
- 数据链路层提供直连两个设备之间的通信功能(也就是局域网通信功能)。网络层的IP协议负责由路由器连接的两个网络之间的通信传输。
- IP协议大致的三个作用模块为IP寻址、路由以及IP分包与分组。
- IP地址用于在所有连接到网络中的主机中识别与之进行通信的目标地址。路由控制是将发送数据送到最终的目标地址。IP包在网络间一个一个被跳(Hop)着转发。
- Hop是指利用数据链路层以下的功能传输数据的一个区间。路由器与路由器之间是数据链路在连接,他们之间的一个Hop是由mac地址识别的。那么我们要发往目标ip地址的包要怎么跳呢?通过路由控制表。
- 路由控制表。为了将数据包发给目标主机,所有主机都维护一张路由控制表。该表记录发往某ip地址的包在下一跳应该发送给哪个路由器。然后在 数据链路 上进行传输。(当然维护这个表是有时限的,因为有些ip地址是变化的)
- IP分包与分组。IP实现的是多数据链路之间的协议。IP连接了多个不同的数据链路,而数据链路最大的区别就是他们各自的最大传输单位不同。为了解决这个问题,IP进行分片处理,将大IP包分成多个小IP包。到对端目的地址(mac)之后再组合起来传给上一层。
- IP协议特征:
- 面向无连接,在发包之前不需要建立连接。目的是简化,提速。传输的可靠性由上一层的TCP来提供
- 提供尽力服务。为了把数据包发送到最终目标地址尽最大努力,但不做收到与否的验证。(所以会出现掉包)
- IP地址:由网段和主机两部分表示组成。网段标识必须保证相互连接的每个段的地址不重复,而相同段内的主机必须有相同的网段地址。IP地址的主机标识不允许在一个网段内重复出现。
- 例子:192.168.128.107/24 表示从第一位数到第24位位置属于网络标识。现在基本上以子网掩码来区分网络标识。255.255.255.0就是24位网段标识。
- IP包在被转发的途中,路由器根据目标IP地址的网络标识进行路由。
- 目前普遍采用的扩充IP的方式为NAT。通过少数全局IP地址代理服务器结合NAT进行互联网通信来扩充ip地址。
- 主机地址全部设为1的时候,该地址是广播地址。主机地址全部为0时,只有在对应网络地址或ip地址不可获知的情况下才可使用。广播地址192.168.0.255用于在同一链路中相互连接的主机之间发送数据包。设为广播地址的IP包会被路由器屏蔽掉,不会到达其他网段的链路上。
- 路由控制表生成:
- 管理员手动
- 路由器与其他路由器相互交换信息时自动刷新。IP协议始终认为路由表是正确的。
- 默认路由,路由表中的任何一个地址都能与之匹配的记录。一般记为0.0.0.0/0
- 主机路由,IP地址所有位都参与路由192.168.153.15/32。主机路由多用于不希望通过网络地址路由的情况。
- 回环地址,同一台计算机上的不同程序之间进行网络通信时所使用的默认地址。localhost(127.0.0.1)。使用这个ip或主机名时,数据包不会流向网络。
- 路由表的聚合:利用网络地址的比特分布可以有效地进行分层配置。对内即使有多个子网掩码,对外呈现出的也是一个网络地址。(其实就是修改了对应的子网掩码)
- DNS服务:Domain Name System域名管理服务。DNS可以将通信字符串自动转换为具体的IP地址。在TCP/IP中有一个叫做主机识别码的东西,主机识别码为每台计算机赋予唯一的主机名,在进行网络通信时可以直接使用主机名而无需一大长传ip地址。主机往往会利用一个叫hosts的数据库文件(比如在Linux中的/etc/hosts)。
- DDNS解析器。进行DNS查询的主机和软件叫做DNS解析器。用户所使用的工作站或者个人电脑都属于解析器。一个解析器至少要注册一个以上域名服务器的ip地址。通常他至少包括组织内部的域名服务器ip地址。
- ARP:根据ARP可以动态地进行地址解析。所以在TCP/IP的网络构造和网络通信中无需事先知道MAC地址究竟是什么,只要有IP地址就可以。