TCP/IP协议族
体系结构及主要协议
现在Internet的主流协议族为TCP/IP协议族,这是一个分层多协议的通信体系。
TCP/IP协议族通常被认为有四个层次,分别是应用层、传输层、网络层和链路层、这四个层次大致对应于OSI七层模型的上三层(应用层、传输层、网络层)以及数据链路层和物理层。
上层协议来使用下层的协议所提供的服务
数据链路层:
数据链路层:网卡接口的网络驱动程序,处理数据在物理传输媒介上的传输。
有两个常用的协议:
ARP协议:(Address Resolve Protocol)地址解析协议
RARP协议:(Reverse Address Resolve Protocol)逆地址解析协议
这两个协议分别负责IP地址和物理地址的解析和逆解析。
由图得,网络层是通过IP地址来锁定一个主机的,而数据链路层是通过物理地址来连接一个主机的。
又因为是自上而下的协议,网络层是不可能直接连接主机的,需要通过数据链路层。
这时候我们就用到了ARP协议来通过数据链路层。
网络层:数据包的选路和转发
现在的广域网WAN,通常使用非常多的分级路由器来进行连接分散的主机或者是局域网LAN
所以,主机间通过多个中间节点(路由器)进行通信。
网络层的任务就是选择这些中间的节点确定两台主机之间的通讯路径。网络层对上层协议隐藏了这些网络的拓扑连接的细节,使得传输层和网络的应用程序看来这两个又是直连的
IP协议
IP协议(Internet Protocol,因特网协议):根据数据包的目的IP地址决定如何投递信息。
如果数据没办法直接发送给目标的主机,那么IP协议就为它寻找合适的下一跳路由器。IP协议使用逐跳(hop by hop)的方式确定通讯路径,然后将数据包交给该路由器进行转发。多次重复这一过程,最终达到目标的主机或者由于发送失败而被丢弃。
ICMP协议
ICMP协议(Internet Control Message Protocol,因特网控制报文协议):检测网络连接。
报文格式如下:
8位的类型来区分报文的类型,有差错报文和查询报文
8位代码是进一步细分不同的条件。
16位校验和是对整个报文进行循环的冗余校验也就是CRC,已检验报文在传输中是否损坏
不同的ICMP的报文有不同的正文内容
传输层:为两台主机上的应用程序提供端到端(end to end)得我通信
传输层只关心通信的起始端和目的端,并不在乎数据包的中转过程。
数据链路层(驱动程序)封装了物理网络的电气细节,网络层封装了网络连接细节,传输层为应用程序封装了一条端对端的逻辑通信的连路,负责收发还有链路的超时重连之类的
TCP协议
TCP协议(Transmission Control Protocol,传输控制协议):为应用层提供可靠的、面向连接的、基于流(stream)的服务。
TCP协议使用了超时重传数据确认的方式来确定数据包能正确的发送到目的端。通信的双方必须先建立TCP连接并在内核中保持维持连接的数据结构,比如连接状态、读写缓冲区还有定时器之类的。通讯结束时必须双方先关闭这些链接释放内核数据。长度没有限制,源源不断地从通信的一端流向另一端。
UDP协议
UDP协议(User Control Transmission Protocol,用户数据报协议):为应用层提供不可靠无连接,基于数据报的服务。如果数据在中途丢失或者发现错误丢弃,只是简单的通知应用程序而不进行数据确认和超时重传的这个任务,需要用户或者程序员来自行的去判断。每个UDP数据报都有一定的长度,接收端必须按照该长度为最小的单位将其所有的数据一次性的读出,否则数据将会被截断。
SCTP协议
SCTP协议(Stream Control Transmission Protocol,流控制传输协议):为在因特网上传输电话信号而设计的服务。
应用层:处理应用程序的逻辑
应用层协议很多,例如:
- Ping应用程序:利用ICMP报文检测网络连接。
- Telnet远程登录协议:在本地完成远程任务
- OSPF(Open Shortest Path First,开放最短路径优先)动态路由更新协议:用于路由器之间的通信。
- DNS(Domain Name Service,域名协议)协议:提供机器域名到IP地址的转换功能。
注:应用层协议可能跳过传输层从而直接使用网络层提供的服务。应用层的协议通常可以使用TCP服务也可以使用UDP的服务。
封装
通过封装(encapsulation)使上层协议使用下层协议提供的服务。
在应用程序数据发送到物理网络之前,将沿着协议栈从上往下依次传递,每一层协议都在上层数据的基础上加上自己的头部信息(尾部信息),实现该层功能。这个过程就是封装。
TCP报文段(TCP message segment):经过TCP封装后的数据
TCP协议为通信双方维持一个连接,并且在内核中存储相关数据。这部分数据中的TCP头部信息和TCP内核缓冲区数据一起构成TCP报文段。
应用程序通过write或者是send来向用户空间到内核空间发送数据。
UDP数据报(UDP datagram):经过UDP封装后的数据
UDP无需为应用层数据保存副本,当一个UDP数据报被发送成功后,UDP内核缓冲区中的该数据报就被丢弃了。
帧(frame):经过数据链路层封装的数据
传输媒介不同,帧的类型不同
例如:
以太网上传输的是以太网帧(Ethernet frame),令牌环网络上传输的是令牌环帧(token ring frame)
帧的最大传输单元(Max Transmit Unit,MTU),即帧最多能携带多少上层数据协议,通常被网络类型限制过长的IP数据报可能需要被分片(fragment)传输,
分用
通过分用(demultiplexing)使在帧到达目的主机沿着自底向上依次传递时,各层协议依次处理帧中本层负责头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。
因为IP协议、ARP协议和RARP的协议都通过帧来传输数据,所以帧的头部需要提供某个字段来区分它们。例如,以太网帧,用两个字节的类型字段来标识上层的协议。
因为ICMP协议、TCP协议和UDP协议都使用IP协议,所以IP数据报的头部采用16位的协议字段来区分它们。TCP的报文段和UDP的数据报则通过16位的端口号字段来区分上层的协议。
帧通过上述的分用的步骤之后,最终将封装的原始数据发送到目标的服务。在顶层的目标服务来看,封装和分用似乎并没有发生过。