问题聚焦:
简单地梳理一下TCP/IP各层的功能和常用协议
详细了解ARP(数据链路层)和DNS(应用层)协议的工作原理
1 TCP/IP协议族体系结构
数据链路层:
    职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网、令牌环等)上的传输。
    常用协议:ARP协议(地址解析协议),RARP协议(逆地址解析协议)——实现了IP地址和机器物理地址之间的相互转换。
    寻址:使用物理地址(MAC地址)寻址一台机器。因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务。
网络层:
    职责:数据包的选路和转发。选路:确定两台主机之间的通信路径,对上层协议隐藏了网络拓扑的细节。
    协议:IP协议(因特网协议)——根据数据包的目的IP地址来决定如何投递它,使用逐跳的方式确定通信路径。
               ICMP协议(因特网控制报文协议)——IP协议的补充,用于检测网络连接。报文格式如下:
               
               报文类型:差错报文,用于回应网络错误(如目标不可到达和重定向);查询报文,查询网络信息(如ping程序使用CIMP报文查看目标是否可到达)
               校验:循环冗余校验码
               注意:ICMP并非严格意义上的网络层协议,因为它使用处于同一层的IP协议提供服务,而一般来说应该是上层协议使用下层协议提供的服务。
传输层:
    职责:为两台主机上的一个应用程序提供端到端的通信,只关心通信的起始端和目的端,为应用程序封装了一条端到端的逻辑通信链路,它负责数据的收发,链路的超时重连等。
    协议:

  • TCP协议(传输控制协议):为应用层提供可靠的,面向链接和基于流的服务。使用超时重传,数据确认方式确保可靠的连接。没有边界限制。
  • UDP协议(用户数据报协议):不可靠,无连接和基于数据报的服务。数据报有一个长度作为读写的最小单位。
  • SCTP协议(流控制传输协议):相对较新的传输层协议,为了在因特网上传输电话信号而设计的。
应用层:
    职责:处理应用程序的逻辑。下面三层负责处理网络通信细节,在内核空间中实现,稳定又高效。应用层则在用户空间实现,因为它负责处理众多逻辑。
    协议:telnet协议(远程登陆协议),OSPF(开放最短路径优先协议),DNS(域名服务协议)
    
2 封装
目的:让上层协议可以使用下层协议提供的服务
实现:应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下一次传递,每层协议都将在上层数据的基础上加上子集的头部信息,以实现该层的功能。这个过程就叫做封装。如下图所示:
        
TCP报文由TCP头部信息和TCP内核缓冲区数据构成。当要向TCP连接写入发送数据时,内核中的TCP模块首先把这些数据复制到与该连接对应的TCP内核发送缓冲区中,然后TCP模块调用IP模块提供的服务,传递的参数包括TCP头部信息和TCP发送缓冲区中的数据,TCP报文段。
需要注意的一点是,TCP是发送数据后,依然在缓冲区中保存有副本,但是UDP发送完之后,直接丢弃缓冲区中的数据。
经过数据链路层封装的数据称为帧,不同的传输媒介有不同的类型的帧。帧的最大传输单元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高性能服务器编程》

服务器编程入门(1)TCP/IP协议族的更多相关文章

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

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

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

    这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 数据链路层有三个目的: 为IP模块发送和 接收IP数据报. 为ARP模块发送ARP请求和接收ARP应答. 为RARP发送RA ...

  3. Android网络编程系列 一 TCP/IP协议族之网际层

    这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 网际层包括:IP.ICMP.IGMP 以及处在网际层实际工作在链路层的 ARP 和 RARP等等协议. 1.IP协议 互联网 ...

  4. Android网络编程系列 一 TCP/IP协议族之传输层

    这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 传输层中有TCP协议与UDP协议. 1.UDP介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,U ...

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

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

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

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

  7. iOS的TCP/IP协议族剖析&&Socket

    原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有S ...

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

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

  9. 第一章 了解TCP/IP协议族

    第一章 了解TCP/IP协议族 1.1 TCP/IP协议族体系结构以及主要协议 IP和TCP协议对编写程序具有最直接的影响,后面的章节会详细的讲到. TCP/IP的体系结构有应用层,传输层,网络层,数 ...

随机推荐

  1. qt下的跨目录多工程编译

    原地址:http://blog.csdn.net/fjb2080/article/details/7386292 转自:http://blog.csdn.net/high_high/article/d ...

  2. 全方位深度剖析--性能测试之LoardRunner 介绍

    一.介绍 LoardRunner是一种预测系统行为和性能负载的测试工具.通过模拟上千万用户实施并发负载及实时性能监控的方式来确认和查找系统的瓶颈,LoardRunner能够对整个企业架构进行测试.通过 ...

  3. 恭喜我开通了CSDN博客

    准备在这里写点东西,记录我的学习过程....

  4. 使用hadoop ecipse插件须要注意的问题

    1.关于run on hadoop的问题: 在未用hadoop eclipse插件前,我以为通过hadoop eclipse 插件不但能够管理hdfs,还能够自己主动打包程序.并帮我自己主动设置Con ...

  5. python3语法小记(二)列表 和 元组

    列表(list): 列表就像一个线性容器,但是比C++的 lis t扩展多得多 列表里的元素可以是相同类型,也可以包含各种类型,比如列表里嵌套另一个列表 >>> L1 = [1,2, ...

  6. JSP自定义标签——简单标签(1)

    前面一篇博客介绍了自定义标签的传统标签使用方式,但是我们会发现,使用传统标签非常的麻烦,而且接口还多,现在传统标签基本都没用了,除了一些比较久的框架.Sun公司之后推出了一个新的标签使用方式,称之为简 ...

  7. 基于visual Studio2013解决面试题之0203栈实现

     题目

  8. HDU - 4944 FSF’s game

    Problem Description FSF has programmed a game. In this game, players need to divide a rectangle into ...

  9. SSL 中证书能否够使用IP而不是域名

    前言:曾经听别人说生成证书时能够用IP地址.今天用样例证实了下用IP地址是不行的. 情景一: 生成证书时指定的名称为IP地址 样例是做单点登录时的样例.web.xml中配置例如以下: <!--该 ...

  10. centos 安装ganglia监控工具

    一个.ganglia基本介绍 ganglia它是一个分布式监控系统,那里有两个Daemon,每间:clientGangliaMonitoring Daemon (gmond)和服务端GangliaMe ...