读《网络是怎样连接的》 第二章总结

回顾第一章的内容

在第一章中,我们用socket 向web服务器发送HTTP请求命令,也从web服务器收到HTTP响应数据,这个过程中,我们把socket想象成一个很厉害的管道,这个管道无视底层(传输层、网络层、数据链路层、物理层)的实现,直接在程序(浏览器)运行过程中就得到了我们想要的东西,并把它渲染成页面,呈现给我们浏览.

现在这一章的内容,就是打开黑匣子,看看数据在传输过程中,都发生了哪些有意思的事情吧!

 

故事,要从这张图片开始...

还记得我们这张图吗?

毫无疑问,这是一串代码,嗯 判断没错!!!

该代码在内存中运行,这里面进行的域名解析(获得域名对应的ip地址)和浏览器准备好了要在socket中发送的HTTP请求,都是在应用层发生的事情,而这里所谓的应用层,就是只某些软件啦,比如这里的浏览器,它让网络设备帮忙进行了域名解析,然后自己把域名这个东西转换成了HTTP请求,      嗯,它做的够多了,让它休息一下,我们看看之后发生了什么吧.

 

现在我们看看图片中的圈1有什么内涵呢?

之前我们知道,两 个socket 连接后相当于就又了管道,通过这个管道能自由的收发数据,,这里圈1建了一个本地的socket,能用本机的ip和端口找到这个socket.

 

圈2?

我们讨论tcp协议方式的连接,所以,第一步的话会进行三次握手,保证这个连接的可靠性,(这里忽略了好多东西,比如相互之间发送的SYN=1的控制码、ack的接收确认码,由于MTU大小而需要分开传输而使用的序号,

还有怕:对方缓冲池因为己方发送速率高于对方应用程序读取速率而导致的缓冲区溢出、后面发送的包都无法接收。 而相互发送的窗口大小)

补充:三次握手期间发送的包 在tcp的传输层封装的时候,并没有携带数据信息.仅仅是发送了控制信息

是了,现在三次握手了,连接可靠安全了.

圈3?

这里就要开始发送数据啦,我们要对数据一层一层的封包并增加其首部的控制信息

1.首先,应用层传下来的,委托socket发送的数据是HTTP请求.

        socket可选的发送数据的方案有tcp、udp两种,这里我们就说tcp吧

2.tcp协议会把上层传下来的东西当成一个黑盒子 ,不管里面是些什么东西,都当成是一个数据块,并在前面增加首部,这个首部就是一些保证稳定连接的控制信息啦,像之前提到的SYN、序号、端口号(识别该主机的哪一个socket)、窗口大小.

3ip协议会把上层tcp协议传下来的东西也当成一个黑盒子,并在前面加一些首部控制信息,这里的控制信息也非常多,主要的知道本机(某网卡)ip地址和目的ip地址、内部封装的协议类型(比如tcp)就好了.

4.接下来还有个MAC首部,这个首部有三个东西,本机(某网卡)的MAC地址、下一个要到达的MAC地址和内部的协议类型,这个MAC首部封装的是ip数据包,所以这个类型就写表示ip类型的那个编码(0800)就好了

5.然后就到了要把这数字信号(0和1)转换成能在以太网上传输的电信号(网线)和光信号(光纤).  

 

接收的话就是反过来,    发送的时候一直加首部、 接收的时候就是去掉首部,取内部的返回数据(比如我们想要的HTTP响应)

 

圈4?

双方(web服务器和本地应用程序)会在tcp控制信号上互发fin,并相互接收对方的确认ACK后,关闭socket连接(就是调用了close())的意思

 

补充一些知识:

1.在填写 目的MAC地址时,我们用了arp协议,这个协议就是在网段上广播ip地址,如果某设备是这个ip,它会返回其MAC地址,由此就找到了

2.ip首部填写了目的IP,数据包要到这个ip地址,需要在网络中不断的传播,每个传播的节点就是路由器,我们可以把这个路由器(路由器里面的路由表)看成一个路标,对照了我们想去的ip地址,该路标会告诉我们往哪个方向走(我们下一站的路由节点是哪一个).

 

3.MAC首部的作用是什么呢,在第二点中,我们知道了下一个地方我们要去的路由节点,但是怎么去呢?  我们的数据包的到达一个路由节点后,知道了 下一个节点在哪,所以我们就再得到该节点的MAC地址,然后写入到MAC首部,这样就能去到下一个路由节点了.

 

4.在把MAC首部打包的东西给网卡,让它帮忙转换成电信号或光信号时,   是先把数据复制到缓冲区中,然后把数据先转变成通用的 数字信号+时钟信号组合的形式,这是因为网线不同,里面传播的信号格式会有些不一样.所有之后还有一个流程,用PHY把数字信号+时钟信号的 形式转换成 主机所连网线能传输的形式.

 

5.接收到信号时,网卡的PHY都会读进来并转换形式,然后又是MAC模块再转换形式,变成0和1的数字信号,,然后通过末尾的FCS校验,确认无误后再检查MAC头部中的接收方地址,如果无误则存到缓冲区中.如果发现MAC首部中的MAC不是MAC模块中记录的地址,就会把这个数据丢了.     数据在缓冲区里了,就会调用中断程序 告诉cpu 这个程序(浏览器)等待的响应数据到啦,让它把网卡缓冲区里的数据读到内存进行后续操作.

 

6. 接 5.    首先,我们先要解开MAC首部,解开的时候我们从首部中的协议类型中知道,后面的包中用的是IP协议,所以我们把MAC首部后面的数据块给IP协议,让它(IP协议栈)去解包.   解包后,我们查看目的ip是不是本机(网卡)ip,如果是,进行后续操作,如果不是.就使用ICMP协议,向发送方告知一下,你发出的包有误,让对方意识到出错了就好了.

7. 接6 ,  ip协议解包后,由于看到了协议头里的数据类型是TCP类型,所以把后续的内容交给了TCP协议栈,tcp协议栈解包后,我们知道了端口号 ,加上另外从ip首部得知的ip地址,我们就能定位本机的哪一个Socket,知道是哪一个socket后,我们就能把tcp首部后面的数据交给他,完成整个SOCKet通讯过程.、

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值