问题聚焦:
简单地梳理一下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. web前端网页开发一般过程

    看见很多新手同学前端开发,效率比较慢.总是拿起代码就敲,不分析,没有逻辑,反而使效率变慢.所谓磨刀不误砍柴工,有一个良好的过程,才是最主要的: 1.分析平面效果图,在草稿纸上画出基本结构图 2.建立项 ...

  2. 表likp新增第一次过账输入日期字段,vl02n/vl01n/vl03n/vl06o的增强

    在程序:MV50AFZ1的 FORM USEREXIT_SAVE_DOCUMENT_PREPARE. *begin of ADD CRQ000000012135 CAIZJIAN 2014/3/25( ...

  3. 基于Spring提供支持不同设备的页面

    基于Spring来检测访问Web页面的设备是很简单的,在这个经验中我们讲到过.通常不同的设备访问我们是通过响应式设计来统一处理各种设备的尺寸的.但是如果希望针对不同的设备,显示不同的内容呢? Spri ...

  4. JAVA Useful Program(1)

    public static void main(String[] args){       //字符串有整型的相互转换          String str=String.valueOf(123); ...

  5. D3D 练习小框架

    自己练习D3D 程序搭的小框架,记录在这里,将来看到好回顾自己独自摸索的苦逼样子. #pragma once #pragma comment(lib,"d3d9.lib") #pr ...

  6. ALV判断修改后是否有不合法数据,有则选中错误行,高亮度显示。

    alv数据表维护表时错误行需要高亮度显示 gt_index_rows TYPE lvc_t_row,"用以存放要选择行的内表 gs_index_rows TYPE lvc_s_row.&qu ...

  7. linux下C/C++,多线程pthread《转载》

    原文网址:http://www.cnblogs.com/xianghang123/archive/2011/08/11/2134927.html ·线程创建   函数原型:int pthread_cr ...

  8. mysql dump 参数

    mysql dump 参数: -R, --routines Dump stored routines (functions and procedures). 备份 函数和存储过程: -E, --eve ...

  9. 学习笔记之TCP/IP协议分层与OSI參考模型

    1.协议的分层      ISO在制定标准化OSI之前,对网络体系结构相关的问题进行了充分的讨论, 终于提出了作为通信协议设计指标的OSI參考模型.这一模型将通信协议中必要 的功能分成了7层.通过这些 ...

  10. google 搜索url详解

    www.google.com [http://www.google.cn/search?q=112&hl=zh-CN&client=aff- 360daohang&hs=yhE ...