Tcp/Ip详解读书笔记

Tcp/IP 详解读书笔记

网络分层为应用层,传输层,网络层,数据链路层,物理层。

物理层:

网线连接电脑,路由器。传递0,1的电信号!

链路层:

确定0和1的分组方式,使用以太网协议,规定使用一组电信号作为一个数据包,被曾为帧(Frame)。每一个帧分为标头(head)和数据(data)。”标头”包含数据包的一些说明项,比如发送者、接受者、数据类型等等;”数据”则是数据包的具体内容。”标头”的长度,固定为18字节。”数据”的长度,最短为46字节,最长为1500字节。因此,整个”帧”最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。

发送者和接受者使用网卡来确定,以太网规定,连入网络的所有设备,都必须具有”网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。mac地址用12位16进制表示,前6表示厂商,后6表示流水号。网卡与网卡之前通信使用 ARP 协议。以太网协议使用广播方式向同网络的电脑广播数据包,每个电脑比较接受者的mac地址是否是和本机的mac地址相同,相同的话就接收,不是就丢弃。

网络层:

需要网络层是因为以太网协议广播数据包作用于同网络的电脑,不同网络使用路由方式发送数据包。出现了网络层后就有网络地址来确定该计算机属于哪个网络了。

网络层使用的是IP协议,它所定义的地址叫网络地址。ipv4,32位二进制组层分为4组用来表示网络号和主机号,确定网络号和主机号使用子网掩码。为1则为网络部分,为0则为主机部分。计算两台计算机是否处于同一网络的方式为分别计算本机 IP地址和子网掩码做与计算,比较结果。

IP协议发送的数据包,叫IP数据包,它也有标头和数据部分,”标头”部分主要包括版本、长度、IP地址等信息,”数据”部分则是IP数据包的具体内容。它放在以太网协议发送的数据包的的数据部分。IP数据包的”标头”部分的长度为20到60字节,整个数据包的总长度最大为65,535字节。因此,理论上,一个IP数据包的”数据”部分,最长为65,515字节。前面说过,以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的,但是我们不知道它的MAC地址。这里存在两种情况,第一两个主机不在同一网络时,将数据包发送到连接两个网络的网关处处理;第二在同一网络时,使用ARP协议发送一个数据包,其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个”广播”地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

传输层:

有了MAC地址和IP地址就可以传输数据包了,同一台主机的不同程序的数据包通过端口来区分,”端口”是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。“传输层”的功能,就是建立”端口到端口”的通信。相比之下,”网络层”的功能是建立”主机到主机”的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做”套接字”(socket)。有了它,就可以进行网络应用程序开发了。

UDP协议是传输层协议,它的数据包分为标头和数据两部分,标头主要定义了发出端口和接收端口,同样它加到IP数据包的数据部分。

TCP数据包和UDP数据包一样,都是内嵌在IP数据包的”数据”部分。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

应用层:

“应用层”的作用,就是规定应用程序的数据格式。最典型的就是HTTP协议。它的数据直接放在tcp数据包的数据部分。


 上一篇
如何优雅的关闭channel 如何优雅的关闭channel
如何优雅的关闭channel关闭channel会出现的问题1.在没有改变 channel 的状态情况下,没有简单的方法来检查通道是否关闭。 2.关闭已经关闭的 channel 会造成 panic 。 3.向一个已经关闭的 channel 中
2020-12-08
下一篇 
数据库学习笔记 数据库学习笔记
数据库学习笔记MySQL基础知识SELECT语法结构 SELECT select_list FROM table_name; 注意事项 SQL 语法不区分大小写,但为了格式化和强调性关键字最好大写。 FROM 关键字最好另起一行,为了更好
2020-09-15
  目录