1 TCP/IP协议族体系结构

数据链路层:
    职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网、令牌环等)上的传输。
    常用协议:ARP协议(地址解析协议),RARP协议(逆地址解析协议)——实现了IP地址和机器物理地址之间的相互转换。
    寻址:使用物理地址(MAC地址)寻址一台机器。因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务。
网络层:
    职责:数据包的选路和转发。选路:确定两台主机之间的通信路径,对上层协议隐藏了网络拓扑的细节。
    协议:IP协议(因特网协议)——根据数据包的目的IP地址来决定如何投递它,使用逐跳的方式确定通信路径。
               ICMP协议(因特网控制报文协议)——IP协议的补充,用于检测网络连接。报文格式如下:
               
               8位报文类型:(1) 差错报文,用于回应网络错误(如目标不可到达和重定向);(2) 查询报文,查询网络信息(如ping程序使用CIMP报文查看目标是否可到达)
               校验:循环冗余校验码
               注意:ICMP并非严格意义上的网络层协议,因为它使用处于同一层的IP协议提供服务,而一般来说应该是上层协议使用下层协议提供的服务。
传输层:
    职责:为两台主机上的一个应用程序提供端到端的通信,只关心通信的起始端和目的端,为应用程序封装了一条端到端的逻辑通信链路,它负责数据的收发,链路的超时重连等。
    协议:
  • TCP协议(传输控制协议):为应用层提供可靠的,面向链接和基于流的服务。使用超时重传,数据确认方式确保可靠的连接。没有边界限制。
  • UDP协议(用户数据报协议):不可靠,无连接和基于数据报的服务。数据报有一个长度作为读写的最小单位。
  • SCTP协议(流控制传输协议):相对较新的传输层协议,为了在因特网上传输电话信号而设计的。
应用层:
    职责:处理应用程序的逻辑。下面三层负责处理网络通信细节,在内核空间中实现,稳定又高效。应用层则在用户空间实现,因为它负责处理众多逻辑。
    协议:telnet协议(远程登陆协议),OSPF(开放最短路径优先协议),DNS(域名服务协议)




2 封装
目的:让上层协议可以使用下层协议提供的服务。
实现:应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下一次传递,每层协议都将在上层数据的基础上加上子集的头部信息,以实现该层的功能。这个过程就叫做封装。如下图所示:
        

经过TCP封装后的数据称为TCP报文段,或者简称TCP段。
  • TCP报文由TCP头部信息和TCP内核缓冲区数据构成。当要向TCP连接写入发送数据时,内核中的TCP模块首先把这些数据复制到与该连接对应的TCP内核发送缓冲区中,然后TCP模块调用IP模块提供的服务,传递的参数包括TCP头部信息和TCP发送缓冲区中的数据,即TCP报文段。
经过UDP封装后的数据称为UDP数据报。
  • 需要注意的一点是,TCP是发送数据后,依然在缓冲区中保存有副本,但是UDP发送完之后,直接丢弃缓冲区中的数据。
经过IP封装后的数据称为IP数据报。
  • IP数据报也包括头部信息和数据部分,其中数据部分就是一个TCP报文段、UDP数据报或者ICMP报文。
经过数据链路层封装后的数据称为帧。
  • 传输媒介不同,帧的类型也不同。比如:以太网上传输的是以太网帧,而令牌环网络上传输的则是令牌环帧。
帧的最大传输单元MTU,即指最多能携带多少上层协议数据,通常以太网帧的MTU是1500字节。帧才是最终在物理网络上传送的字节序列。


3 分用
分用:当帧达到目的主机时,将沿着协议栈自底向上依次传递,各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。这个过程成为分用。

类型:如果类型字段的值为0x800,则帧的数据部分为IP数据包;如果类型字段的值为0x806,则帧的数据部分为ARP请求或应答报文。
  • 因为ICMP、TCP、UDP都使用IP协议,所以IP数据包头部使用16位的协议字段区分它们。
  • TCP报文段和UDP数据包则通过其头部的16位端口号字段来区分上层应用程序。
在顶层目标服务来看,封装和分用似乎并没有发生过。



4 测试网络
测试环境设定:



5 ARP协议工作原理
工作内容:实现任意网络层地址到任意物理地址的转换
工作原理:主机向子集所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,此网络上的其他机器都会收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。
报文详解:长度分布:221126464
        
        28字节:ARP请求/应答报文的长度;
        28+18字节:一个携带ARP请求/应带报文的以太网帧长度为46字节
        46+18字节:有的实现要求以太网帧数据部分长度至少为46(所以这里的46和上面的48+18=46没什么关系),在这种情况下,一个携带ARP请求/应答报文的以太网帧长度为64字节。

查看和修改命令:
        
        第一项描述另一台测试机器Kongming20
        第二项描述的是路由器
        删除和添加ARP缓存项命令为:
        
 数据包范例分析:
    下面的两个包是用tcpdump抓取的远程登陆一个机器过程中,在tcp连接简历之前,查询MAC地址的两个ARP数据包(形式上是以太网帧)。
    
第一个数据包:
  • 源物理地址:00:16:d3:5c:b9:e3
  • 目的物理地址:ff::ff::ff::ff::ff::ff,以太网广播地址,用以表示整个LAN,该LAN上的所有机器都会收到并处理这样的帧
  • 类型字段:0x806,表示分用的目标是ARP模块
  • 以太网帧:42字节,实际是46字节,tcpdump未统计以太网帧尾部的4字节CRC字段,其中数据部分长度28字节
  • Request:表示这是一个ARP请求
  • 查询:who-has 192.168.1.109 tell 192.168.1.108 表示查询ip地址为192.168.1.109的机器的物理地址
第二个数据包的内容类似,只是ARP类型不同,改为了应答(Reply)

图解通信过程:

注意:ARP请求和应答应该是从以太网驱动程序发出的,而并非直接从ARP模块发出,所以用虚线表示;路由器也将接收到以太网帧1,因为该帧是一个广播帧。


6 DNS工作原理
工作内容:一套分布式的域名服务系统,处理域名和IP地址的映射
报文详解:
         
        16位标识字段:标记一对DNS查询和应答,以此查区分一个DNS应答i哪个DNS查询的回应。
        16位标志:用于协商具体的通信方式和反馈通信状态
        接下来的4个字段:对查询而言,一般查询问题个数为1,其他三个为0;应答报文应答资源记录数至少为1,授权资源记录数和额外资源记录数可为0或非0
        查询问题格式:(具体不再细说,很容易查到各个字段的含义)
        
        应答,授权和额外信息格式(都使用资源记录格式):
        
Linux下访问DNS服务
    要访问DNS服务,必须先知道DNS服务器的IP地址,存放地址:/etc/resolv.conf,内容如下:
    



7 socket和TCP/IP协议族的关系
数据链路层、网络层、传输层协议是在内核中实现的,因此操作系统需要实现一组系统调用,使得应用程序能够访问这些协议提供的服务。socket就是实现这组系统调用的API。
socket有两个功能:
  • 将应用程序从用户缓冲区中复制到TCP/UDP内核发送缓冲区,以交付内核来发送数据。如,从内核TCP/UDP接收缓冲区中复制数据到用户缓冲区,以读取数据;
  • 应用程序可以通过它们来修改内核中各层协议的某些头部信息或其他数据结构,从而精细地控制底层通信的行为。

参考资料:《Linux高性能服务器编程》

Linux 高性能服务器编程——TCP/IP协议族的更多相关文章

  1. linux高性能服务器编程 (二) --IP协议详解

    第二章 IP协议详解 什么是IP协议:IP 协议是TCP/IP协议族的动力,它为上层提供了无状态.无连接.不可靠的服务. IP 头部信息:头部信息会出现在每一个IP数据报上,便于记录IP通信的源端IP ...

  2. Linux 高性能服务器编程——TCP协议详解

    问题聚焦:     本节从如下四个方面讨论TCP协议:     TCP头部信息:指定通信的源端端口号.目的端端口号.管理TCP连接,控制两个方向的数据流     TCP状态转移过程:TCP连接的任意一 ...

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

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

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

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

  5. Linux 高性能服务器编程——IP协议详解

    1 IP服务特点 IP协议是TCP/IP协议族的动力,它为上层协议提供无状态.无连接.不可靠的服务. 无状态:IP通信双方不同步传输数据的状态信息,因此IP数据包的发送.传输和接收都是无序的.     ...

  6. linux高性能服务器编程 (三) --TCP协议详解

    第三章 IP协议详解 TCP协议是TCP/IP协议族中的另外一个重要的协议,与IP协议相比,TCP协议更高进应用层.一些重要的socket选项都和TCP协议相关.这一章主要从如下方面学习: 1)TCP ...

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

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

  8. Linux 高性能服务器编程——Linux网络编程基础API

    问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字(so ...

  9. linux高性能服务器编程

    <Linux高性能服务器编程>:当当网.亚马逊 目录: 第一章:tcp/ip协议族 第二章:ip协议族 第三章:tcp协议详解 第四章:tcp/ip通信案例:访问Internet 第五章: ...

随机推荐

  1. vue 2.0 路由切换以及组件缓存源代码重点难点分析

    摘要 关于vue 2.0源代码分析,已经有不少文档分析功能代码段比如watcher,history,vnode等,但没有一个是分析重点难点的,没有一个是分析大命题的,比如执行router.push之后 ...

  2. ASP.NET MVC 中 View 的设计

    1. 前言  感觉有好长时间没有接触View 了,周末闲来无事,翻翻书桌上的书来回顾回顾ASP.NET MVC中View的相关内容. 2. View概述  View 通过应用程序在Action 中返回 ...

  3. [TJOI 2016&HEOI 2016]求和

    Description 题库链接 求 \[f(n)=\sum_{i=0}^n\sum_{j=0}^i S(i,j)\times 2^j \times (j!)\] \(S(i, j)\) 表示第二类斯 ...

  4. [POI 2006]OKR-Periods of Words

    Description 题库链接 定义 \(A\) 串为 \(B\) 串的循环串,当且仅当 \(A\) 是 \(B\) 的前缀(不包括 \(B\) 本身),且 \(B\) 为连续的 \(A\) 串拼接 ...

  5. [JLOI2015]装备购买

    题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j < ...

  6. 素数密度_NOI导刊2011提高(04)

    题目描述 给定区间[L, R](L <= R <= 2147483647,R-L <= 1000000),请计算区间中素数的个数. 输入 两个数 L 和 R. 输出 一行,区间中素数 ...

  7. 【网络流】【BZOJ1221】【HNOI2001】软件开发

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1221 题意:你有3种方法进行对毛巾的处理,不同的处理方法有不同的cost,问你要如何规划才 ...

  8. ●HDU 3507 Print Article

    题链: http://acm.hdu.edu.cn/showproblem.php?pid=3507 题解: 斜率优化DP 一个入门题,就不给题解了,网上的好讲解很多的.   这里就只提一个小问题吧( ...

  9. 2015 多校联赛 ——HDU5289(二分+ST)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  10. UVA 1481 Genome Evolution

    Xi, a developmental biologist is working on developmental distances of chromosomes. A chromosome, in ...