网络协议学习笔记2

带着4个问题学习:

1.TCP在进行三次握手的时候,IP层和MAC层对应都有什么操作呢?

2.学习第三层的时候会提到,IP协议里面包含目标地址和源地址。第三层往往还会学习路由协议,路由是中转站,我们从原始地址A到目标地址D,中间经过两个中转站A->B->C->D,是经过路由转发的。

那么,A知道自己的下一个中转站是B,应该把B的IP地址放在哪里呢?B知道自己的下一个中转站是C,从B发出来的包,应该把C的IP地址放在哪里呢?如果放在IP协议中的目标地址,那包到了中转站,怎么知道最终的目的地址是D呢?

3.经常听说二层设备,三层设备。二层设备处理的通常是mac层的东西,那我发送一个HTTP包,是在第七层工作的,那是不是不需要经过二层设备?即便经过了,二层设备是否处理?或者说,二层设备处理的包里,有没有HTTP层的内容?

 4.综合问题。从你的电脑,经过ssh登陆到公有云主机里,都需要经历哪些过程?



网络为什么要分层?

复杂的程序都要分层,这是程序设计的要求。比如:复杂的电商还会分数据库层、缓存层、compose层、controller层和接入层,每一层专注做自己本层的事情。

程序是如何工作的?


当一个网络包从一个网口经过的时候,你看到了,首先要看看要不要请进来,处理一把。有的网口配置了混杂模式,凡事经过的,全部拿进来。

拿进来之后,就要交给一段程序处理。于是,你调用process_layer2(buffer)。当然,这是一个假的元素,你知道有这个函数。

这个函数中,摘掉二层的头,看一看,应该根据头里面的内容做什么操作。

假如mac地址与自己的相同,那证明是这个包是发给自己的,于是调用process_layer3(buffer)。这个时候,buffer里面已经没有二层的头了,因为在上一个函数中处理的过程已经拿掉了,或者将开始的偏移量移动了一下。在这个函数里,摘掉三层的头,看看到底是发给自己的,还是希望转发出去。

如何判断呢? 如果ip地址不是自己的,就转发出去,如果ip是自己的,那就是发给自己的。根据ip头里面的标示,拿掉三层的头,进行下一层的处理,到底是调用process_tcp还是process_udp呢?

假设这个地址是tcp的,则会调用process_tcp(buffer).这时候buffer里面没有三层的头,就需要查看四层的头,看这是一个发起,还是一个应答,又或者是一个正常的数据包,然后分别由不同的逻辑进行处理。如果是发起或者应答,接下来可能要发送一个回复包;如果是一个正常的数据包,就需要交给上层了。交给谁呢?是不是有process_http(buffer)呢?

没有的,如果你是一个网络包处理程序,你不需要process_http(buffer),而是应该交给应用去处理。交给哪个应用呢?在四层的头里面有端口号,不同的应用监听不同的端口号。如果发现浏览器应用在监听这个端口,那你发给浏览器就行了。至于浏览器怎么处理,和你没有关系哦。

浏览器自然是解析HTML,显示出页面来。电脑的主人看到页面很开心,就点了鼠标。点击鼠标的动作被浏览器捕获。浏览球知道,又要发起另一个HTTP请求了,于是使用端口号,将请求发给你。


你应该调用send_tcp(buffer).不用说,buffer里面就是HTTP请求的内容。这个函数里面加一个TCP的头,记下源端口号。浏览器会给你目的的端口号,一般为80端口。

然后调用send_layer3(buffer).buffer里面已经有HTTP的头和内容,以及tcp的头。在这个函数里面加一个ip的头,记录下源ip的地址和目标ip的地址。

然后调用send_layer2(buffer)。buffer里面已经有了HTTP的头和内容,tcp的头,以及ip的头。这个函数里面要加一下Mac的的头,记录下源mac地址,得到的是本机器的mac地址和目标mac地址。不过,这个还要看当前知道不知道,知道就直接加上;不知道就通过一定的协议处理过程,找到mac地址。反正要填一个,不能空着。

万事具备,只要buffer里面的内容完整,就可以从网口发出去了,你作为一个程序的任务就算告一段落了。


揭秘层与层之间的关系

知道了这个过程之后,我们再来看一看原来困惑的问题。

首先是分层的比喻。所有不能表示出层层封装含义的比喻,都是不恰当的。

总经理握手,不需要员工在吧,总经理之间谈什么,不需要员工参与吧,但是网络世界不是这样的,。正确的应该是,总经理之间沟通的时候没,经理将总经理放在自己兜里,然后组长把经理放自己兜里,员工把组长放自己兜里,像套娃一样。现实生活中,往往是员工说一句,组长补充两句,经理补充两句,总经理补充两句。在网络时间里,则是相反的。

那TCP在三次握手的时候,ip层和mac层在做什么呢?当然是tcp每发送一个消息,都会带着ip层和mac层了。因为tcp每发送一个消息,ip层和mac层的所有机制都要运行一遍。而你只看到了tcp3次握手,其实,ip层和mac层也忙活了很久。

这里要记住一点,只要是在网络层上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层

所以,对tcp协议来说,3次握手也好,重试也好,只要想发出去包,就要用ip层和mac层,不然是发不出去的。

经常有人问,我都知道那台机器的ip地址了,直接给他发消息呗,干嘛还要mac地址。  这里的关键是,没有mac地址消息是发不出去的。

所以如果一个HTTP协议的包跑在网络上,他一定是完整的。无论这个包经过哪些设备 ,他都是完整的。

所谓的二层设备、三层设备,都是这些设备上跑的程序不同而已。一个HTTP协议的包经过一个二层设备,二层设备收进去的是整个网络包。这里面HTTP,TCP,IP,MAC都有。什么叫二层设备呀,就是只把mac头摘下来,看看到底是丢弃、转发、还是自己留着。那什么是三层设备呢?就是把mac头摘下来之后,再把ip头摘下来,看看到底是丢弃、转发、还是自己留着。


小结:

1.始终想想自己是一个处理网络包的程序:如何拿到网络包,如何根据规则进行处理,如何发出去

2.始终牢记一个原则:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝不可以有上层没下层。

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

推荐阅读更多精彩内容

  • 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端...
    杰伦哎呦哎呦阅读 3,472评论 0 6
  • OSI模型 OSI时OSI/RM的简称:全称是Open Systems Interconnection Refer...
    Spicy_Crayfish阅读 1,599评论 0 4
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,037评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 今天爸爸妈妈给我买了一个手尖陀螺。这个陀螺四个紫色,还有银色。我非常喜欢这个手尖陀螺。这个陀螺上面有圆形,...
    任曦说日记阅读 519评论 0 0