第一章 了解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. linux iptables 开启和关闭服务端口号

    需求: 模拟数据库挂掉,服务正常但访问数据库报错,恢复数据库端口后,服务是否能正常访问数据库 步骤:首先,断掉端口号5432,测试服务运行情况:其次,开启端口号5432,测试服务运行情况: 具体操作: ...

  2. STM32之关闭JTAG

    1.有些时候不想用JTAG口(而用SWJ在线调试),把JTAG暂用的IO通过remap出来使用 2.比如48 pin的STM32F103CBT6单片机: GPIO_PinRemapConfig(GPI ...

  3. Oracle作业5——多表查询、子查询

    一.基础练习: 1.查询和scott相同部门的员工姓名ename和雇用日期hiredate SELECT ENAME,HIREDATE FROM EMP WHERE DEPTNO=(SELECT DE ...

  4. JS-类型相关

    typeof检测类型typeof 返回的数据类型种类:number(js不分整形,浮点等等 所有的数字都是number类型).string.boolean.undefined.object.funct ...

  5. LeetCode 中级 - 重新排序得到的幂(105)

    从正整数 N 开始,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零. 如果我们可以通过上述方式得到 2 的幂,返回 true:否则,返回 false. 示例 1: 输入:1 输出 ...

  6. 【HDOJ 2888】Check Corners(裸二维RMQ)

    Problem Description Paul draw a big m*n matrix A last month, whose entries Ai,j are all integer numb ...

  7. 用jQuery实现(全选、反选、全不选功能)

    在jQuery选择器的基础下我们实现一个全选,反选,全不选功能! <script type="text/javascript">        $(function ( ...

  8. sql查询关于时间的一些汇总

    今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:select * from 表名 where ...

  9. 慎使用sql的enum字段类型

    在sql的优化中,会有同学提到一点:使用enum字段类型,代替其他tinyint等类型.以前这也是不少人喜欢优化的,但是现在细想,是非常不合理的. 优点: 1.可以设置区间范围,比如设置性别:1男2女 ...

  10. Linux中Kibana部署

    1.下载kibana安装包kibana-5.5.0-linux-x86_64.tar.gz tar –xzf kibana-5.5.0-linux-x86_64.tar.gz解压 把文件移动到 Mv ...