第一章 了解TCP/IP协议族

第一章 了解TCP/IP协议族


1.1 TCP/IP协议族体系结构以及主要协议

IP和TCP协议对编写程序具有最直接的影响,后面的章节会详细的讲到.

TCP/IP的体系结构有应用层,传输层,网络层,数据链路层(四层基本模型)

从主要拥有的协议来看:

  • 在数据链路层中有RAP(Address Resolve Protocol,地址解析协议)和RARP(Reverse Address Resolve Protocol,逆地址解析协议)

  • 在网络层有IP(Internet Protocol,因特网协议)

  • 在传输层有TCP(Transmission Control Protocol,传输控制协议),UDP(User Datagram Protocol,用户数据协议)和SCTP(Stream Control Transmission Protocol,流控制传输协议)

  • 在应用层有许多协议,例如我们熟知的telnet远程登录协议,OSPF(Open Shortest Path First,开放最短路径协议),
    DNS(Domin Name Service,域名服务).

从主要功能来看:

  • 数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输.利用其拥有的ARP协议完成了IP地址与机器物理地址之间(通常是MAC地址)的转换.在这一层上使用物理地址寻址一台机器.RARP仅用于无盘工作站 .

  • 网络层实现数据包的选路与转发,因为通信的两台主机一般不是直接相连的,而是通过多个节点相连,此层的目的就是选择这些中间节点,以确定两台主机之间的通信路径.当数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳(next hop)路由器,并将数据包交付给该路由器来转发.IP协议使用逐级跳(hop by hop)的方式确定通信路径.ICMP是IP协议的重要补充,主要用于检测网络连接.

  • 传输层为两台主机上的应用程序提供端到端(end to end)的通信,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程.

  • 应用层负责处理应用程序的逻辑.

从所在内核/用户态来看:

  • 数据链路层/网络层/传输层都在内核空间中实现,因为它们负责处理网络通信细节,必须得稳定高效.

  • 应用层则在用户空间中实现,因为它负责处理众多逻辑,例如文件传输等,避免内核庞大故不会在内核中实现,但也有例外.


1.2 封装与分用

  • 那么上层协议是如何使用下层协议提供的服务呢?

  • 答: 封装(encapsulation)

  • 那么封装的过程是怎么样的?

  • 答: 应用程序数据在发送到物理网络之前,将沿着协议栈从上往下一次传递,每层协议都将在上层数据的基础上加上自己的头部信息(有时还有尾部信息),以实现该层的功能.

举个例子:

当发送端应用程序使用send函数向一个TCP连接写入数据时:

  1. 内核中TCP模块首先把这些数据复制到该连接对应的TCP内核发送缓冲区中,然后TCP模块调用IP模块提供的服务,传递的参数包括TCP头部信息和TCP发送缓冲区中的数据,即TCP报文段

  2. 经过IP封装后的数据称为IP数据段(IP Datagram)

  3. 经过数据链路层封装的称为帧(frame)

帧是最终在物理网络上传送的字节序列.

  • 那么当帧到达目标主机时,应用程序是如何接受源主机发送的数据呢?

  • 答: 分用(demultiplexing)

  • 那么分用的过程是怎么样的?

  • 答: 到达目标主机后,将沿着协议栈自底向上一次传递,各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序.

在顶层服务看来,封装和分用似乎没有发生过


1.5 ARP协议工作原理

ARP协议能实现任意网络层地址到任意地址的转换,不过本书仅讨论从IP地址到以太网地址(MAC地址)的转换.

一. ARP协议的工作原理为:

主机向所在的网络广播一个ARP请求,该请求会包含目标机器的网络地址.

此网络上的其他机器都将收到这个请求(使用tcpdump抓包能看到f4:xx:xx:xx:xx:2a > ff:ff:ff:ff:ff:ff,即发送了一条广播),但只有被请求的目标机器会回应一个ARP请求,其中包含自己的物理地址.

在ARP中也会实现一个高速缓冲,其中包含了最近访问的机器的IP地址到物理地址的映射,避免了重复的ARP请求.

二. 在Linux机器上执行"arp -a" #display (all) hosts in alternative (BSD) style.

结果如下:

? (192.168.1.100) at 0c:xx:xx:xx:xx:e4 [ether] on eth0
? (192.168.1.1) at f4:xx:xx:xx:xx:2a [ether] on eth0
? (192.168.1.106) at d4:xx:xx:xx:xx:98 [ether] on eth0

很好的显示了IP到MAC地址的映射


1.6 DNS工作原理

域名查询方式有很多种实现方式,比如NIS(Network Information Service,网络信息服务),DNS和本地静态文件等. 本节主要讨论DNS.

一. DNS工作原理

网络客户端程序使用DNS协议来向DNS服务器查询目标主机的IP地址.

主观表现为向DNS服务器提出请求,等待并接受回复.

二. 在Linux机器上访问DNS服务

First. 知道DNS服务器地址

pi@happyPi:~ $ cat /etc/resolv.conf 
nameserver 172.16.8.8 
nameserver 202.106.0.20

Second. 提出请求

ping www.baidu.com

Third. 收到回复

IP 192.168.1.108.53969 > 172.16.8.8.53: 15051+ A? www.baidu.com. (31)
IP 172.16.8.8.53 > 192.168.1.108.53969: 15051 3/5/5 CNAME www.a.shifen.com., A 119.75.217.109, A 119.75.218.70 (260)
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 119.75.217.109
www.a.shifen.com has address 119.75.218.70

我的机器向DNS服务器发起了请求("ping www.baidu.com" 引发 "192.168.1.108.53969 > 172.16.8.8.53")

并收到了它的回复(172.16.8.8.53 > 192.168.1.108.53969),告诉我www.baidu.com是www.a.shifen.com的别名.

还有两个地址,分别是119.75.217.109 和 119.75.218.70.

通过这两个IP我都可以得到www.baidu.com的页面(在目标页面允许通过IP访问的情况下).


1.7 socket和TCP/IP协议族的关系

由socket实现的 控制数据链路层/网络层/传输层协议 的API提供两个功能:

  1. 将应用程序数据从用户缓冲区中复制到TCP/UDP发送缓冲区,以交付内核来发送数据,或者是从内核TCP/UDP接收缓冲区中复制数据到用户缓冲区,以读取数据.

  2. 应用程序可以通过它们来修改内核中各层协议的某些头部信息或其他数据结构,从而精细地控制底层通信的行为.

socket是一套通用网络编程接口.


关于第一章的总结:

  • TCP/IP四层模型以及对应主要拥有的协议:应用层/传输层(TCP,UDP)/网络层(IP)/数据链路层(ARP)

  • 这些协议对数据进行了封装和分用,使得顶层服务在发送与接收数据的时候觉得什么也没发生

  • ARP协议通过广播请求询问实现了IP与以太网地址的相互映射

  • DNS协议通过向DNS服务器发送请求并接收回复的形式实现域名到IP的映射


From

Linux 高性能服务器编程 游双著 机械工业出版社

MarkdownPad2

2017/1/16 19:52:22

posted on 2017-02-13 16:37  leihui  阅读(274)  评论(0编辑  收藏  举报