你好,这是《网络是怎样连接的》的第3篇读书笔记,第二章《用电信号传输TCP/IP》后半部分:IP与以太网的包收发操作。
先看下经典的TCP/IP四层模型:

通常,下层模块支撑上层应用,也就是说网络互联层IP模块向上支撑传输层的TCP和UDP应用,或者说TCP应用调用IP模块实现数据收发。
 
1.包的收发 
TCP模块在执行连接、收发、断开等各阶段操作时,都需要委托IP模块将数据封装成包发送给通信对象。包包括头部和数据两部分,头部包含目的地址等控制信息,可以理解为快递包裹的面单,头部的后面就是要发送给对方的数据,相当于快递包裹里面的货物。

IP模块发送包的时候,会添加两个头部: 
1)MAC头部:以太网用的头部,包含接收方的MAC地址;
2)IP头部:IP用的头部,包含接收方的IP地址。

2.IP头部:包含接收方IP地址
IP模块接收TCP模块的委托,负责包的收发工作,首先会生成IP头部附加在TCP头部的前面,IP头部包含的内容如下所示:

IP头部的“接收方IP地址”填写通信对象的IP地址,发送方IP地址需要判断发送所使用的网卡,并填写网卡的IP地址。
如果计算机有多个网卡,怎么决定由哪个网卡发送呢?看完下图,你就明白了。

 
3.MAC头部:基于以太网 
IP模块在生成IP头部之后,会在它前面添加MAC头部,MAC头部是以太网使用的头部,包含了接收方和发送方的MAC地址等信息。

在以太网中,有一种叫做广播的方法,刻意把包发给连接在同一以太网中的所有设备。ARP就是利用广播对所有设备提问:“XX这个IP是谁的?如果是你的,请把你的网卡MAC地址告诉我。”然后就会收到目标IP的回答:“这个IP地址是我的,我的MAC地址是XXXX。”

 
4.将包转成电信号或者光信号发出去 
IP生成的网络包只是存放在内容中的一串数字信息,没有办法直接发送给对方。因此,我们需要将数字信息交给网卡转换为电信号或者光信号,才能在网上传输。

网卡驱动从IP模块取包之后,会将其复制到网卡的缓冲区,然后向MAC模块发送发送包的指令。MAC模块将包从缓冲区取出,并在开头记上报头和起始帧分界符,在末尾加上用于检测错误的FCS(帧校验序列)。

最后,在数据信号之外再发送一组用来区分比特间隔的时钟信号,把数据信号和时钟信号叠加后发送出去。接收方检测到时钟信号周期变化,采用和发送数据叠加过程相反的方式从数据信号中读取相应的电压和电流值,将其转换成为0、1。

5.接收返回包传给TCP 
接收操作的第一步是不管什么信号全部收进来再说,然后,通过报头的波形同步时钟,然后遇到起始帧分界符时开始将后边的信号转换成数字信息。这个操作和发送时刚好相反,PHY模块先开始工作,然后再轮到MAC模块。 
首先,PHY模块会将信号转换成通用格式并发送给MAC模块,MAC模块在从头开始将信号转为数字信息,存放到缓冲区。当到达信号的末尾时候还需要检查FCS,如果是错误报直接丢弃。如果FCS没有问题,接下来就看一下MAC头部中接收方MAC地址与网卡的MAC地址是否一致,以判断是否是自己的,如果不是则直接丢弃。如果是自己的,则将包放入缓冲区,接下来网卡会通知计算机收到了一个包。 
通知采用中断机制 。首先,网卡向扩展总线中的中断信号线发送信号,该信号线通过计算机中的中断控制器连接到CPU。当产生中断信号时,CPU会暂时挂起正在处理的任务,切换到操作系统中的中断处理程序。然后,中断处理程序会调用网卡驱动执行相应的接收操作。 
IP模块先开始工作,第一步是检查IP头部,如果接收方IP地址和网卡的地址一致,检查确认之后就可以接收这个包了。IP模块工作结束后,接下来包会交给TCP模块,TCP模块会根据IP头部中的接收方和发送方IP地址,以及TCP头部中的接收方和发送方端口号来查找对应的套接字。找到对应的套接字之后,就可以根据套接字中记录的通信状态执行相应操作。如果包的内容是应用程序数据,则返回确认接收的包,并将数据放入缓冲区,等待应用程序来读取;如果是建立或者断开连接的控制包,则返回相应的响应控制包,并告知应用程序建立和断开连接的操作状态。
 

IP与以太网的包收发操作的更多相关文章

  1. TCP/IP协议的数据传输过程详解——IP与以太网的包收发操作

    MTU:一个网络包的最大长度,以太网中一般是1500字节:(含有头部长度,包括IP头部,TCP头部,不包括MAC头部) MSS:除去头部后,一个网络包所能容纳的TCP的数据的最大长度 下图为TCP/I ...

  2. 在 shell 脚本获取 ip、数字转换等网络操作

    在 shell 脚本获取 ip.数字转换等网络操作 ip 和数字的相互转换 ip转换为数字 :: function ip2num() { local ip=$1 local a=$(echo $ip ...

  3. 标准的TCP/IP工业以太网-EtherNet/IP

    标准的TCP/IP工业以太网-EtherNet/IP                            徐智穹以太网具有传输速度高.兼容性好.应用广泛等方面的优势,支持几乎所有流行的网络协议,其中 ...

  4. 网络数据包收发流程(四):协议栈之packet_type

    进入函数netif_receive_skb()后,skb正式开始协议栈之旅.先上图,协议栈大致过程如下所示:跟OSI七层模型不同,linux根据包结构对网络进行分层.比如,arp头和ip头都是紧跟在以 ...

  5. 网络数据包收发流程(三):e1000网卡和DMA

    一.硬件布局每个网卡(MAC)都有自己的专用DMA Engine,如上图的 TSEC 和 e1000 网卡intel82546.上图中的红色线就是以太网数据流,DMA与DDR打交道需要其他模块的协助, ...

  6. js获取访问IP、地区、、当前操作浏览器

    js获取IP.地区.当前操作浏览器有什么用呢? 我的回答是用处很多,比如现在的异地登录和对用户常用浏览器做数据分析等. 源代码如下:index.html <!DOCTYPE html> & ...

  7. mysql设置指定ip访问,用户权限相关操作

    基础语法GRANT priv_type ON database.table TO user[IDENTIFIED BY [PASSWORD] 'password'] [,user [IDENTIFIE ...

  8. 网络数据包收发流程(二):不配置NAPI的情况

    一.no NAPI 数据结构不配置NAPI的时候,网络设备不使用自己的napi_struct结构,所有网络设备驱动都使用同一个napi_struct,即cpu私有变量__get_cpu_var(sof ...

  9. Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作

    Mysql操作: grant select,insert,update,delete on *.* to root@"%" Identified by "123456&q ...

随机推荐

  1. 计算laws的matlab代码

    很简单的代码:不过花了codeforge上的10个点,自己写也早写出来了; 代码如下: 文件:calLaws.m function [y,h_v,h_h]=calLaws(x,id,LocalEner ...

  2. 【C++】颜色的设置

    1.改变整个控制台的颜色用 system("color 0A"); 其中color后面的0是背景色代号,A是前景色代号.各颜色代码如下: 0=黑色 1=蓝色 2=绿色 3=湖蓝色  ...

  3. 【sqli-labs】 less17 POST - Update Query- Error Based - String (基于错误的更新查询POST注入)

    这是一个重置密码界面,查看源码可以看到username作了防注入处理 逻辑是先通过用户名查出数据,在进行密码的update操作 所以要先知道用户名,实际情况中可以注册用户然后实行攻击,这里先用admi ...

  4. (转)基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度

    http://www.cnblogs.com/wuhuacong/p/4085725.html 在默认情况下,EasyUI的DataGrid好像都没有具备自动宽度的适应功能,一般是指定像素宽度的,但是 ...

  5. Linux:只复制文件权限和所有者

    在Linux上,怎么把一个文件的<权限和所有者>赋给另一个文件呢? chown命令可以设置所有者和用户组:chmod可以设置文件的权限.这两个命令都支持使用另一个文件做为引用(RFILE) ...

  6. apply,call,bind区别

    js中有三个改变this指针的方法,分别是 apply,call,bind.很多人只知道能改变的this,但是具体的适用场景不是太清楚.我也是遇到坑后不断的实践发现了区别. call ,apply方法 ...

  7. 【JavaScript高级进阶】JavaScript变量/函数提升的细节总结

    // 测试1 console.log('----------test1--------------'); console.log(global); // undefined var global = ...

  8. 51nod1256 乘法逆元【扩展欧几里得】

    给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的. Input 输入2个数M, N中间用 ...

  9. [luogu4290 HAOI2008]玩具取名(DP)

    传送门 Solution 裸区间DP Code #include <map> #include <cmath> #include <cstdio> #include ...

  10. Problem 19

    Problem 19 You are given the following information, but you may prefer to do some research for yours ...