TCP/IP协议族

TCP/IP协议族
共有4层,自定而上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,通过若干协议来实现,上层协议使用下层协议提供的服务

应用层 ping telnet OSPF DNS

——————socket

传输层 TCP UDP
网络层 ICMP IP (内核空间)
数据链路层 ARP Data Link RARP

数据链路层
实现了网卡接口的网络驱动程序,以及处理数据在物理媒体上的传输。
ARP协议(地址解析协议)和RARP协议(逆地址解析协议) 他们实现了IP地址和机器物理地址之间的相互转换。
网络层通过IP地址寻找目标,而数据链路层是通过物理地址(MAC地址)寻找目标,所以要使用ARP协议。
RARP协议用于网络上的无盘工作站。他们无法记住自己的IP,所以通过网卡的物理地址查询自己的IP地址。

网络层
网络层实现数据包的选路和转发。两主机之间一般有多个中间节点(路由器)相连接,它的任务就是选择这些中间,确定两台主机之间的通信线路。在传输层和网络应用程序看,双方是直连的。

ICMP协议
主要功能是传输网络诊断信息。
传输的信息分为2类:
1.错误信息(诊断网络故障)
只提供特定类型的错误汇报,不能帮助IP协议称为“可靠”的协议
2.咨询 (比如某台计算机询问路径上的每个路由器都是谁,然后各个路由器同样用ICMP包回答)
ICMP包都会有Type(表示ICMP包的大小),Code,Checksum(IP协议中的只校验体验头部的不同,ICMP中校验是整个ICMP包 头和数据)
ping命令使用的是ICMP包。使用时,向目标主机发送询问类型ICMP包,目标主机收到后回发送回答类型ICMP包。(类型值为8)
代码值0:重定向报文
代码值1:主机重定向

传输层
传输层魏两台主机上的应用程序提供端到端的通信。它不在乎数据包的中转过程
数据链路层封装了物理网络的电气细节
网络层封装了网络链接的细节
传输层为应用程序封装了端到端的逻辑通信链路,负责数据的收发、链路的超时重连等。
传输层主要的三个协议:TCP、UDP、SCTP协议
TCP(传输控制协议):为应用层提供可靠的、面向链接的和基于流的服务。它使用超时重传、数据确认等方式确保包正确的发送至目的端。(可靠)
使用TCP协议通信双方必须建立TCP连接,并在内核中为该连接位置一些必要的数据结构,比如连接的状态、读写缓冲区以及定时器等。通信结束,双方必须关闭连接以释放这些内核数据
基于流的数据没有边界(长度)限制,它源源不断地从一端流入另一端。可以逐个字节的发送,接收端也可以逐个字节的读出。

UDP协议(用户数据报协议)
为应用层提供不可靠(无法保证数据是否正确传送到)、无连接、基于数据包的服务。使用UDP协议的应用程序要自己处理数据确认,超时重传等逻辑。UDP是无连接的,应用程序每次发送数据要指定接收端的地址。每个UDP数据包都有一个长度,接收端必须以该长度为最小单位将其从所有内容一次性读出,否则数据将被截断。

以上都是在内核空间中实现

应用层
ping是应用程序,调试网络环境的工具,利用ICMP检测网络连接
telnet一种远程登陆协议
OSPF(开放最短路径优先)一种动态路由更新协议,用于路由器之间的通信
DNS(域名服务)提供机器域名到IP地址的转换

                TCP报文段/UDP数据报       IP数据报

应用程序数据——->TCP/UDP+应用程序数据——–>IP头部+TCP/UDP+应用程序数

                     以太网帧

据———-> 以太网头部+IP头部+TCP/UDP+应用程序数据(46~1500字节)

当发送端应用程序使用send(或write)函数向TCP连接写入数据时,内核中TCP模块先吧数据复制到与该连接对应的TCP内核发送缓冲区中,然后用IP模块提供的服务,传递的参数包括TCP头部信息和TCP发送缓冲区中的数据,即TCP报文段。

UDP封装后的数据称为UDP数据报,UDP无须为应用程序层数据保存副本,因为它的服务是不可靠的,如果数据成功被发送,那么UDP内核缓冲区中的该数据包将被丢弃。如果应用程序检测到数据报没能正常被接受,要重发这个数据报,必须重新从用户空间将该数据报拷贝到UDP内核发送缓冲区中。

经过数据链路层封装的数据称为帧(frame)
MTU(帧的最大传输单元),以太网MTU是1500字节,过长的IP数据报可能需要被分片(fragment)传输。

分用
当帧到达目的主机时,将沿着协议自底向上依次传递,各层协议依次处理帧中本曾负责的头部数据,以获取信息,最终将处理后的帧交给目标应用程序。这个过程称为分用(demultiplexing)分用是依靠头部信息中的类型字段实现的。

IP、ARP和RARP都使用帧传输数据,所有帧头部使用2字节的类型字段标识协议,如果主机接收到以太网帧类型字段的值为0x800,则帧的数据部分为IP数据模块,以太网将帧交给IP模块;0x806是ARP请求或应答报文;0x835是RARP请求或应答报文
同样,ICMP协议、IP协议和UDP协议都使用IP协议,IP数据报采用16位协议子弹来区分它们。
TCP和UDP才用16位的端口号区分,DNS是53,HTTP是80。

ARP协议工作原理
ARP协议能实现任意网络层地址到任意物理地址的转换
工作原理:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址。此网络上的其他机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。

DNS工作原理
DNS是一套分布式的域名服务系统。每个DNS服务器上都存放着大量的机器名和IP地址映射,并且动态更新。
16位标示字段用于标记一对DNS查询和应答,以此区分一个DNS应答是哪个DNS查询的回应。
16位标志阻断用于协商具体的通信方式和反馈通信状态。
QR – opcode—-AA—-TC—–RD——RA—-zero—–rcode
1位 —- 4位—1位——1位—1位——-1位—-3位—-4位

QR查询/应答标志 0 查询报文 1应答报文
opcde定义查询和应答的类型 0 标准查询 1 反响查询 2 请求服务器状态
AA授权应答标志,仅由应答报文使用 1标示域名服务器是授权服务器
TC 截断标志 1标示DNS报文超过512,并被截断 UDP服务时使用
RD 递归查询标志 1 递归查询(查询没有查询另一个DNS服务器) 0 迭代查询(返回其他DNS服务器IP)
zero这3位未用,设置为0
rcode 4位返回码,表示应答状态

查询百度ip地址
这里写图片描述
host命令使用DNS协议和DNS服务器通信
详细使用 请 man host

socket和TCP/IP协议族的关系
socket定义的这一组API提供如下两点功能:1.将应用程序数据从用户缓冲区中复制到TCP/UDP内核发送缓冲区,以交付内核来发送数据(send函数);2.应用程序通过他们来修改内核中各层协议的某些头部信息和其他数据结构(setsockopt函数来设置IP数据报在网络上的存活时间)。

你可能感兴趣的:(网络)