第一章 了解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. mac os下可能是最好的豆瓣电台——diumoo

    由于我一直用豆瓣fm听音乐,在网上找了下豆瓣的相关应用,都感觉不是太好, 最后发现一个mac版的app--diumoo! 这个软件看着非常舒服,一点也不占桌面空间,它一直默默在桌面右上角,鼠标划上去会 ...

  2. MyBatis学习总结

    1.引入jar包到lib目录下:只需要mybatis的一个mybatis.jar及数据库的jar包. 2.在src下新建xml配置文件,即上图中的conf.xml <?xml version=& ...

  3. BestCoder14 1002.Harry And Dig Machine(hdu 5067) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目意思:给出一个 n * m 的方格,每一个小方格(大小为1*1)的值要么为 0 要么为一个正 ...

  4. centos7 安装教程

    1. 在安装的时候,不要用默认的最小安装.选择GNOME Desktop 2.自动分区的时候,选择自己进行分区 2个分区,1个大小为1024M的swap分区,剩下的分配一个ext3的分区.设备类型都选 ...

  5. http头部信息研究

    1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Charset: 浏览器申明自 ...

  6. C++ strcpy实现

    char * strcpy(char * strDest,const char * strSrc) { if ((NULL==strDest) || (NULL==strSrc))  throw &q ...

  7. 基于 HTML5 WebGL 的 3D 服务器与客户端的通信

    这个例子的初衷是模拟服务器与客户端的通信,我把整个需求简化变成了今天的这个例子.3D 机房方面的模拟一般都是需要鹰眼来辅助的,这样找产品以及整个空间的概括会比较明确,在这个例子中我也加了,这篇文章就算 ...

  8. html5 的存储

    html5提供了很多存储的功能,诸如localStorage,sessionStorage,indexedDB,还有离线缓存等,本次主要介绍离线缓存跟本地存储. 离线缓存  使用离线存储可以缓存部分文 ...

  9. 朱晔的互联网架构实践心得S1E5:不断耕耘的基础中间件

    朱晔的互联网架构实践心得S1E5:不断耕耘的基础中间件 [下载本文PDF进行阅读] 一般而言中间件和框架的区别是,中间件是独立运行的用于处理某项专门业务的CS程序,会有配套的客户端和服务端,框架虽然也 ...

  10. SQL Server(2000,2005,2008):恢复/回滚时间比预期长(译)

    我已经讨论了各种确定恢复状态的方法,但是本周我参与了一个围绕回滚的有趣讨论.交易已经运行了14个小时,然后发出了KILL SPID.SPID进入回滚,并发生2天和4小时. 自然的问题是为什么不14小时 ...