你好,这是《网络是怎样连接的》的第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. 分布式机器学习框架:MxNet

    MxNet官网: http://mxnet.readthedocs.io/en/latest/ 前言: caffe是很优秀的dl平台.影响了后面很多相关框架. cxxnet借鉴了很多caffe的思想. ...

  2. OpenCV:使用 随机森林与GBDT

    随机森林顾名思义,是用随机的方式建立一个森林.简单来说,随机森林就是由多棵CART(Classification And Regression Tree)构成的.对于每棵树,它们使用的训练集是从总的训 ...

  3. 备份xx

    https://www.tuicool.com/articles/V3EBzev https://www.tuicool.com/topics/11080087?st=0&lang=1& ...

  4. git与pycharm结合使用

    一.配置pycharm 在pycharm中选择file-->setting,在弹出的窗口中选择version control,选择git,配置git的路径 将当前项目关闭 在弹出的窗口中选择ch ...

  5. 表操作(day03)

    回顾: 1.单行函数 2.表连接 oracle中的表连接 内连接 等值连接 select e.id,e.first_name,d.name from s_emp e,s_dept d where e. ...

  6. (C/C++学习)2.C语言中文件流操作基本函数总结

    函数所在头文件:stdio.h 说明:前半部分主要为对各个文件流操作函数的例举,后半部分着重于上机运行分析.文中部分引用自王桂林老师的C/C++课件. 1.FIELE *fopen(const cha ...

  7. 洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk【贪心+背包】

    由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的.此 ...

  8. docker安装部署

    1. 如何安装 Epel源到 RHEL/CentOS 7/6/5? RHEL/CentOS rpm -ivh http://mirrors.ustc.edu.cn/epel/7/x86_64/Pack ...

  9. Python-Pandas简单操作

    1.直接构建复杂嵌套索引 2. MultiIndex方式构建复杂的索引 多层索引操作 pandas堆叠处理

  10. PAT 1080. Graduate Admission

    It is said that in 2013, there were about 100 graduate schools ready to proceed over 40,000 applicat ...