计算机网络-3

IP模块

之前TCP模块已经建立好了连接,接下来就要委托IP模块来发送包了。
IP模块是发送包的一个入口,真正发送、转发包的是集线器和路由器。

IP 模块就负责几件事,添加两个头部。
(1) MAC 头部:以太网用的头部,包含通过以太网的局域网将包传输至最近的路由器所需的控制信息
(2) IP 头部: 将包发往目的地所需的控制信息。目标IP等
(3) 之后将包交给网卡,将数字信号转换成光、电信号发送出去。
以太网:就是局域网。局域网之间通信使用MAC地址。而路由器之间转发需要用IP地址

image.png

包发送出去之后会首先发送到连接的集线器,集线器中有张表,其中记录了目的地址最近的路径中的最近的路由器。到达路由器后,路由器中有张IP协议的表,可根据这张表以及 IP 头部中记录的目的地信息查出接下来应该发往哪个路由器,同时需要查出下一个路由器的MAC地址改写当前的MAC头部。不断重复到达目的地。
现代路由器一般都有集线器功能

image.png

IP 的职责就是将委托的东西打包送到对方手里,或者是将对方送来的包接收下来,仅此而已

路由表

image.png

目标地址和子网掩码都是 0.0.0.0,这表示默认网关,如果其他所有条目都无法匹配,就会自动匹配这一行

IP头

image.png

其中最重要的就是接收方的IP和协议号了。TCP:06、 UDP:11

IP模块也可以分片。它的分片主要是针对网络层的, 如果超过链路的MTU就需要分片,而TCP主要是在传输层对传输的数据进行分片。

MAC头

image.png

以太类型表示以太包是什么协议的,可以有多种,一般是IP。
发送的时候是没有接收方的MAC地址的,需要通过ARP来查询MAC地址。ARP是通过IP查询MAC地址的方式。是通过广播的方式在子网中发送消息。

image.png

ARP是有缓存的,避免每次都需要广播,产生多余的ARP包。并且缓存会在几分钟内删除。


image.png

为什么有ip地址还需要mac地址?

MAC地址在第二层网络链路层是用来在以太网(局域网)中传输使用的。而IP是在第三层网络层是用来不同的子网中传输的。而且MAC地址是一个物理地址(出厂唯一,不可修改),IP是一个逻辑地址(可以随意修改)。由于ip太灵活了,所以不能当成唯一寻址方式,但是mac又太死板了,如果全是mac寻址,那么换个网卡就会换个地址。所以需要两个配合。在局域网中使用“二层通信”,利用ip通过arp广播方式寻找mac地址最近的设备。而在跨子网段使用“三层通信”。

网卡

image.png

网卡会把数字信号转换成电、光信号发送出去。网卡驱动从 IP 模块获取包之后,会将其复制到网卡内的缓冲区中,然后向MAC 模块发送发送包的命令,MAC 模块会将包从缓冲区中取出,并在开头加上报头起始帧分界符,在末尾加上用于检测错误的帧校验序列

报头:一串固定的信号,代表开始的信号,就像音乐的前奏,接收方接受到就知道这是一个包要开始传输了

起始帧分界符:报头结束时的一串信号,相当于就是前奏和歌曲的分界,告知下一帧就是内容了

帧校验序列: 会将整个数据加头信息按照一定规则转换成一串信号就是帧校验序列,接收方接收到也会按照固定规则转换,和帧校验序列对比,看看数据有没有丢失或者错误

image.png

MAC 模块从报头开始将数字信息按每个比特转换成电信号,然后由 PHY,或者叫 MAU 的信号收发模块发送出去 。在这里,将数字信息转换为电信号的速率就是网络的传输速率,例如每秒将 10 Mbit 的数字信息转换为电信号发送出去,则速率就是10 Mbit/s,PHY(MAU)模块会将信号转换为可在网线上传输的格式,并通过网线发送出去

如果是接收方,过程刚好相反
收到的信号的开头是报头,通过报头的波形同步时钟,然后遇到起始帧分界符时开始将后面的信号转换成数字信息。这个操作和发送时是相反的,即PHY(MAU)模块先开始工作, 然后再轮到 MAC 模 块。 首 先,PHY(MAU)模块会将信号转换成通用格式并发送给 MAC 模块,MAC 模块再从头开始将信号转换为数字信息,并存放到缓冲区中。当到达信号的末尾时,还需要检查 FCS。具体来说,就是将从包开头到结尾的所有比特套用到公式中计算出 FCS,然后和包末尾的 FCS 进行对比,正常情况下两者应该是一致的,如果中途受到噪声干扰而导致波形发生紊乱,则两者的值会产生差异,这时这个包就会被当作错误包而被丢弃。

MAC模块还会去看一下 MAC 头部中接收方MAC 地址与网卡在初始化时分配给自己的 MAC 地址是否一致,不一致就丢弃,一致就将包放入缓冲区,网卡会利用中断程序告诉CPU收到一个包,CPU有空响应后就会调用网卡驱动,网卡驱动被中断处理程序调用后,会从网卡的缓冲区中取出收到的包,并通过 MAC 头部中的以太类型字段判断协议的类型。现在我们在大多数情况下都是使用 TCP/IP 协议。然后交给IP模块

IP模块第一步是检查 IP 头部,确认格式是否正确。如果格式没有问题,下一步就是
查看接收方 IP 地址。如果接收网络包的设备是一台 Windows 客户端计算机,那么服务器返回的包的接收方 IP 地址应该与客户端网卡的地址一致,检查确认之后我们就可以接收这个包了,如果接收到的包是经过分片的,那么 IP 模块会将它们还原成原始的包。接下来包会被交给 TCP 模块

TCP模块会根据 IP 头部中的接收方和发送方 IP 地址,以及 TCP 头部中的接收方和发送方端口号来查找对应的套接字,找到对应的套接字之后,就可以根据套接字中记录的通信状态,执行相应的操作了。例如,如果包的内容是应用程序数据,则返回确认接收的包,并将数据放入缓冲区,等待应用程序来读取;如果是建立或断开连接的控制包,则返回相应的响应控制包,并告知应用程序建立和断开连接的操作状态

UDP

TCP被设计的很复杂可以保证将数据高效且可靠地发送给对方。可以实现重发。最简单的是收到全部包,其中一个有错误,全部重发,但是这样效率太低。所以有TCP的设计。但是如果包很小,几乎不会被分片。重发也是重发一个。那么使用TCP就有点大材小用了。

如果不使用 TCP,也不需要发送那些用来建立和断开连接的控制包了。此外,我们发送了数据,对方一般都会给出回复,只要将回复的数据当作接收确认就行了,也不需要专门的接收确认包了。

UDP 没有 TCP 的接收确认、窗口等机制,因此在收发数据之前也不需要交换控制信息,也就是说不需要建立和断开连接的步骤,只要在从应用程序获取的数据前面加上 UDP 头部,然后交给 IP 进行发送就可以了。接收也很简单,只要根据 IP 头部中的接收方和发送方 IP 地址,以及 UDP 头部中的接收方和发送方端口号,找到相应的套接字并将数据交给相应的应用程序就可以了。除此之外,UDP 协议没有其他功能了。遇到错误或者丢包也一概不管。因为 UDP 只负责单纯地发送包而已,并不像TCP 一样会对包的送达状态进行监控,所以协议栈也不知道有没有发生错误。但这样并不会引发什么问题,因此出错时就收不到来自对方的回复,应用程序会注意到这个问题,并重新发送一遍数据。这样的操作本身并不复杂,也并不会增加应用程序的负担

UDP头部


image.png

域名解析、音视频一般采用UDP,因为域名解析包小,音视频需要保证不延迟,丢几帧包无所谓

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容