你好,这是《网络是怎样连接的》的第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. 【Linux】VMware安装VMware Tools工具

    VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能(Sun VirtualBox Guest Additions),是VMware提供的增强虚拟显 ...

  2. SQL Server存储过程作业(一)

    创建客房类型表RoomType 创建客房状态表RoomState 创建客房信息表Room 创建结账状态表ResideState 创建客人信息表GuestRecord 编写sql语句 USE maste ...

  3. ubuntu操作系统的目录结构

    /:根目录,是所有目录的绝对路径的起始点.一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中 /bin (类似的还有/usr/bin) ...

  4. 【sqli-labs】 less25 GET- Error based -All you OR&AND belong to us -string single quote(GET型基于错误的去除了or和and的单引号注入)

    加单引号 order by一下 http://localhost/sqli-labs-master/Less-25/?id=1' order by 1%23 order by 变成了der by 下面 ...

  5. 团体程序设计天梯赛-练习集-L1-047. 装睡

    L1-047. 装睡 你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次.下面给 ...

  6. Java-Class-Test:Test-1

    ylbtech-Java-Class-Test:Test-1 1.返回顶部 1.1. package com.ylbtech.api; import com.y;btech.WxApiApplicat ...

  7. 前端开发—HTML

    HTML介绍 web服务的本质 import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen( ...

  8. 蒟蒻的长链剖分学习笔记(例题:HOTEL加强版、重建计划)

    长链剖分学习笔记 说到树的链剖,大多数人都会首先想到重链剖分.的确,目前重链剖分在OI中有更加多样化的应用,但它大多时候是替代不了长链剖分的. 重链剖分是把size最大的儿子当成重儿子,顾名思义长链剖 ...

  9. 360 基于 Prometheus的在线服务监控实践

    转自:https://mp.weixin.qq.com/s/lcjZzjptxrUBN1999k_rXw 主题简介: Prometheus基础介绍 Prometheus打点及查询技巧 Promethe ...

  10. js实现的时间轴效果

    今天整理以前的资料发现以前写的一个时间轴效果,当时也是网上找了很久没有找到,就自己写了一个,现在发出来给有需要的人,代码写的可能有点乱. 效果图: 下面是美工做的设计图的效果(有个美工就是好): 下面 ...