美文网首页
阮一峰关于网络的学习笔记

阮一峰关于网络的学习笔记

作者: 柠檬汁酸 | 来源:发表于2018-04-28 16:25 被阅读50次

互联网由一整套协议构成,TCP只是其中的一层,TCP是以太网协议和IP协议的上层协议,也是应用层协议的下层协议;

最底层的以太网协议(Ethernet)规定了电子信号如何组成数据包(packet), 解决了子网内部的点对点通信,但以太网协议不能解决多个局域网如何互通,这有IP协议解决;

IP协议定义了一套自己的地址规则,成为IP地址,它实现了路由功能,允许某个局域网的A主机向另一个局域网的B主机发送消息,路由器是基于IP协议,局域网之间要靠路由器连接;

IP协议只是一个地址协议,并不保证数据包的完整,如果路由器丢包(比如缓存满了,新进来的数据包就会丢失),就需要发现丢了哪一个包,以及如何重新发送这个包,这就要依靠TCP协议

简单的说,TCP协议的作用是,保证数据通信的完整性和可靠性,防止丢包;

以太数据包的大小是固定的,最初是1518字节,后来增加到1522字节,其中1500字节是负载(payload), 22字节是头信息(head)

IP数据包在以太网数据包的负载里,它也有自己的头信息,最少需要20字节,所以IP数据包的负载最多为1480字节。

IP数据包在以太网数据包里面,TCP数据包在IP数据包里面,它的头信息最少也需要20字节,所以TCP数据包的最大负载时1460字节。由于IP和TCP协议往往有额外的头信息,所以TCP负载实际为1400字节左右。

一条1500字节的信息需要两个TCP数据包。HTTP/2协议的一大改进是压缩HTTP协议头信息,使得一个HTTP请求可以放在一个TCP数据包里,而不是分成多个,这样就提高了速度。

数据发送的时候,TCP协议为每个包编号,简称SEQ,以便接收的一方按照顺序还原,万一放生丢包,页可以知道丢失的是哪一包

收到TCP数据包以后,组装还原是操作系统完成的。应用程序不会直接处理TCP数据包。对应用程序来说,不用关心数据通信的细节。除非线路异常,收到的总是完整的数据。应用程序需要的数据放在TCP数据包里面,有自己的格式(比如HTTP协议)

TCP并没有提供任何机制,表示原始文件大小,这由应用层的协议来规定。比如,HTTP协议就有一个头信息content-Length,表示信息体的大小。对于操作系统来说,就是持续地接收TCP数据包,将他们按顺序组装好,一个包都不少。

操作系统不会去处理TCP数据包里面的数据,一旦组装好TCP数据包,就把它们转给应用程序。TCP数据包里面有一个接口(port)参数,就是用来指定转交给监听改端口的应用程序。

应用程序收到组装好的原始数据,以浏览器为例,会根据HTTP协议的content-Length 字段正确独处一段段的数据, 这也意味着,

服务器发送数据包,当然越快越好,最好一次性全发出去。但是,发得太快,就有可能丢包。带宽小、路由器过热、缓存溢出等许多因素都会导致丢包。线路不好的话,发得越快,丢得越多。

默认情况下,接收方没收到两个TCP数据包,就要发送一个确认信息,确认的英语是acknowledgement,简称ACK

ACK携带两个信息:期待要收到的下一个数据包的编号;接收方的接收窗口的剩余容量

由于TCP通信是双向的,所以双方都需要发送ACK。两方的窗口大小,很可能是不一样的。

每一个数据包都带有下一个数据包的编号,如果下一个数据包没有收到,nameACK的标号不会发生变化。

互联网的五层:应用层、传输层、网络层、链接层、实体层

实体层:它就是吧电脑连接起来的物理手段,它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

链接层:它在实体层的上方,确定了0和1的分组方式。以太网规定,一组电信号构成一个数据包,叫做“帧”(Frame),每一帧分成两个部分:标头(Head)和数据(Data),标头包含数据包的一些说明项,数据则是数据包的具体内容。标头的长度,固定为18字节,数据的长度,最短46字节,最长1500字节。因此,整帧最短为64字节,最长为1518字节,如果数据很长,就必须分割成多个帧进行发送

以太网数据包必须知道接收方的MAC地址,然后才能发送。发送是以广播的形式传送数据(发送给本网络的所有计算机,由接收方自己判断是否接收该数据)

网络层:IP协议,为每一台计算机分配IP地址,确定哪些地址在同一个子网络,IP地址和子网掩码进行二进制的AND运算(同为1,则为1,否则为0),然后比较结果是否相同,如果是,就表明它们在同一个子网络中,否则就不是

如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的网关(gateway),让网关处理。

通过ARP协议,我们可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。

传输层:建立“端口到端口”的通信,网络层的功能是建立“主机到主机”的通信,只要确定主机和端口,我们就能实现程序之间的交流。在数据包中加入端口信息,需要UDP协议,整个UDP数据包放入IP数据包的“数据部分”,UDP数据包标头一共8个字节,总长度不超过65535字节,正好放进一个IP数据包

0到1203的端口被系统占用,用户只能选用大于1023的端口。

TCP数据包和UDP数据包一样,都是内嵌在IP数据包的数据部分

应用层:规定应用程序的数据格式,这是最高一层,直接面对客户,它的数据就放在TCP数据包的“数据”部分;

网络通信就是交换数据包

DNS协议:发送数据包,必须要知道对方的IP地址。DNS协议可以将网址转换成IP地址。

输入www.google.com, 

向DNS服务器发送一个DNS数据包(53端口) =>DNS服务器相应返回Google的IP地址172.194.72.105 =>判断IP是不是在同一个子网络,(否)=>因此,我们要向google发送数据包,必须通过网关192.168.1.1转发,接收方的MAC地址将是网关的MAC地址 =>TCP的header中设置端口信息 => IP 的header中设双方的IP地址=>IP数据包嵌入以太网数据包,以太网数据包需要设置双方的MAC地址(通过ARP协议得到google的MAC地址)=>经过多个网关转发,google服务器收到多个以太网数据包,根据IP头的序号,google将多个包拼起来,取出完整的TCP数据包,然后读取里面的“HTTP”请求=>响应“HTTP请求”,再用TCP协议发回来=>本机收到HTTP响应,将网页展示出来,完成一次网络通信

数据大于以太网数据包的最大容量,IP数据包必须分割成多个包,每个包都有自己的IP头

相关文章

  • 阮一峰关于网络的学习笔记

    互联网由一整套协议构成,TCP只是其中的一层,TCP是以太网协议和IP协议的上层协议,也是应用层协议的下层协议; ...

  • JavaScript学习笔记三

    JavaScript学习笔记三 个人学习笔记参考阮一峰的JavaScript教学类型转换,内存,深拷贝,关于内存的...

  • ASCII,Unicode,utf-8等字符编码学习笔记

    ASCII,Unicode,utf-8等字符编码学习笔记 学习自阮一峰的网络日志,地址http://www.rua...

  • React学习笔记

    写在前面 React入门学习笔记。 教程可参考:React 教程 | 菜鸟教程阮一峰的网络日志 > React 入...

  • JavaScript学习笔记二

    JavaScript学习笔记二 个人学习笔记参考阮一峰的JavaScript教学学习笔记二是对学习笔记一的补充 J...

  • 学习blog

    blog 阮一峰网络bloges6 阮一峰redux 阮一峰nodejskoa前端资料智课网JavaScript前...

  • DNS 原理入门

    DNS 原理入门 来源:阮一峰的网络日志 作者:阮一峰

  • 前端资源笔记

    前端学习 学习CSS布局 阮一峰的网络日志 JavaScript A Primer on Bézier Curve...

  • 谷歌的代码管理

    谷歌的代码管理 转载自:阮一峰的网络日志 作者:阮一峰

  • [转载]学习JavaScript闭包(Closure)

    阮一峰的网络日志-学习Javascript闭包(Closure) David Flanagan-JavaScrip...

网友评论

      本文标题:阮一峰关于网络的学习笔记

      本文链接:https://www.haomeiwen.com/subject/bdzwlftx.html