第一章 了解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

第一章 了解TCP/IP协议族的更多相关文章

  1. 第12章 网络基础(1)_网络分层和TCP/IP协议族

    1. 协议的概念 (1)计算机网络中实现通信必须有一些约定.如对速率.传输代码.代码结构.传输控制步骤和出错控制等约定,这些约定即被称为通信协议 (2)在两个节点之间要成功地进行通信,两个节点之间必须 ...

  2. Android网络编程系列 一 TCP/IP协议族

    在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...

  3. linux高性能服务器编程 (一) --Tcp/Ip协议族

    前言: 在学习swoole入门基础的过程中,遇到了很多知识瓶颈,比方说多进程.多线程.以及进程池和线程池等都有诸多的疑惑.之前也有学习相关知识,但只是单纯的知识面了解.而没有真正的学习他们的来龙去脉. ...

  4. 服务器编程入门(1)TCP/IP协议族

    问题聚焦: 简单地梳理一下TCP/IP各层的功能和常用协议 详细了解ARP(数据链路层)和DNS(应用层)协议的工作原理 1 TCP/IP协议族体系结构 数据链路层:     职责:实现网卡接口的网络 ...

  5. TCP/IP协议族(一) HTTP简介、请求方法与响应状态码

    接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...

  6. OSI模型和TCP/IP协议族(一)

    1990年以前,再数据通信和组网文献中占主导地位的分层模型是开放系统互连(Open System Interconnnection,OSI)模型.当时所有人都认为OSI模型将是数据通信的最终标准,然而 ...

  7. Linux 高性能服务器编程——TCP/IP协议族

    1 TCP/IP协议族体系结构 数据链路层:     职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网.令牌环等)上的传输.     常用协议:ARP协议(地址解析协议),RARP协议 ...

  8. TCP/IP知识总结(TCP/IP协议族读书笔记二)

    接下来,总结一下网络层的协议,IP,ARP,RARP,ICMP,IGMP.当我们在网络传输的过程中,把分组交付到主机或路由器需要两级地址:物理地址和逻辑地址.而且我们需要能够把物理地址映射成为相应的逻 ...

  9. TCP/IP协议族——IP工作原理及实例具体解释(上)

     IP协议具体解释 本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包.来观察IP数据报传送过程中IP的格式,以及分片的过程. IP头部信息:IP头部信息出如今每一个 ...

随机推荐

  1. MySQL常用API函数

    -- 返回数字的绝对值 SELECT ABS(-10) -- 返回不大于X的最大整数值 SELECT FLOOR(10.9) -- 返回不小于X的最大整数值 SELECT CEILING(10.4) ...

  2. 阻止按下backspace键造成页面回退相像

    在IE浏览器中,会出现当你使用鼠标选中input标签或者是textarea标签,或者啥也没选中的时候,按下backspace键会触发浏览器的回退. 针对以上问题的解决思路:     1. 当按下键盘时 ...

  3. MVC学习十:MVC 特性作用和MVC 验证

    根据代码分析特性用处 [DisplayName("学员名")] [DataType(DataType.Text)] [StringLength(,ErrorMessage=&quo ...

  4. Python入门基础:代码的编码风格

    每种语言都有自己的编码风格,对于Python这种比较注重于空格的影响的代码而言,其风格也是相当重要的. 主要包括以下几点: 1:使用 4 空格缩进,而非 TAB  .在小缩进(可以嵌套更深)和大缩进( ...

  5. 智能指针 与 oc中的指针

     智能指针 与 oc中的指针 智能指针的原理及实现 当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝:另一种更优雅的方式是使用智能指针 ...

  6. 【Nginx】使用Nginx作为Http代理的配置文件

    请看配置文件中的注释~ #user nobody; worker_processes 1; #pid logs/nginx.pid; events { worker_connections 1024; ...

  7. .Net core使用Quartz.Net 实现定时任务

    很多情况下,我们需要完成一些定时执行的功能,用很多定时工具,像:hangfire,TimeJob,以及Quartz.net,不过quartz.net 比较精确一些,功能也比较强大,所以我选择了Quar ...

  8. 5 替换空格 JavaScript

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.   原来一个空格字符,替换之后 ...

  9. Angular.js-2入门

    1.angular与MVC MVC即Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...

  10. Webstorm新建vue类型文件设置

    今天安装了Node.js,配置了vue需要的框架,发现原有的wenstorm新建文件的时候没有vue文件选项,因此,学习了一下webstorm如何配置创建vue文件 具体过程如下: 第一步,打开web ...