第2章:用电信号传输TCP/IP数据

1、协议栈的内部结构
由TCP、UDP、IP组成。其中,IP中包含ICMP和ARP协议。ICMP用于告知网络包传送过程中产生的错误及各种控制信息,ARP用于根据IP地址查询相应的以太网MAC地址。

2、显示套接字命令
netstat -ano
netstat:用于显示套接字内容的命令。
-a:显示通信、未通信所有状态的套接字。
-n:显示IP地址和端口号。
-o:显示使用该套接字程序的PID。
备注:

  • 显示多个IP地址是因为安装了多块网卡,计算机本机显示为0.0.0.0,表示不绑定IP地址;通信对象显示为0.0.0.0表示还没有开始通信,没有绑定IP和端口号。此外,UDP协议的套接字不绑定对方IP和端口,因此为*:*。
  • LISTENING表示等待对连接的状态;ESTABLISHED表示完成连接并正在进行数据通信的状态表。

3.什么连接?
实际上就是通信交换控制信息,在套接字中记录这些必要信息并准备收发数据的操作。

4.TCP头部的控制位
URG:表示紧急指针字段有效。
ACK:acknowledge的缩写,表示接收数据序号字段有效,一般表示数据已经被接收方收到。
PSH:表示通过flash操作发送的数据。
RST:表示强制断开连接,用于异常中断的情况。
SYN:发送方和接收方相互确认序列号,表示连接操作。
FIN:表示断开连接·。

5.协议栈收发数据
一次将多少数据交给协议栈是由应用程序自己决定的,协议栈不能控制这一行为。主要由两个因素判断:
(1)网络包的数据长度。在缓冲区内等待长度差不多,这样限定长度可以避免发送大量小包。
网络包长度的两个参数:MTU和MSS。
MTU:表示网络包的最大长度,以太网中一般是1500字节,是包含头部的总长度。
MSS:表示网络包中所能容纳的最大的数据长度,MTU减去头部长度。
(2)时间。当发包频率不高时,就无需等待长度达到限定,协议栈内有一个计时器,在限定时间内,如果不继续发送数据,就直接将缓冲区的网络包发送出去。
总结:时间优先还是数据长度优先?长度优先,网络效率会高,但是会因为等待填满缓冲区而产生延迟,反之,依然有问题,所以这很矛盾,二者不可平衡,这就需要协议栈的开发者决定。

6.使用滑动窗口管理ACK
(1) 滑动窗口理解:滑动窗口就是在发送方发送数据,等待接收方接收数据返回响应ACK的时间过程中,继续向接收方源源不断的发包,节省时间。
(2)优点:节省时间
(3)缺点:由于接收方需要计算ACK号,组装数据块等返回给发送方,这些操作没完成下一个包就到了,可能会导致缓存溢出,包就进不来了。
(4)解决办法:接收方会告诉发送方自己最多接收多少数据,然后发送方根据这个值对数据发送操作进行判断,最大数据量称为”窗口大小“(一般和缓冲区的大小一致)。

7.TCP/IP包 包含的信息
(1)MAC头部(用于以太网协议):包含MAC地址
(2)IP头部(用于IP协议):包含IP地址
解释:IP头部中包含要访问服务器的IP地址,IP协议可以根据这一地址查找包的传输方向,从而找到下一个路由器的位置。接下来IP协议会委托以太网协议将包传输过去。IP协议会查找下一个路由器的以太网地址,并将地址写入MAC头部,这样,以太网协议就知道要将这个包发送到哪个路由器上。重复经过路由器,最后到达目的地。
**疑问:**是怎么判断包向哪里传输的呢,集线器就派上用场了,集线器会有一张表(用于以太网协议的表),可根据以太网头部的目的信息查出相应的传输方向。

8.IP和以太网收发包操作流程
TCP委托给IP(委托过程就是TCP在数据块的前面加上TCP头部,然后整个传递给IP模块),然后IP模块添加IP头部和MAC头部信息,接下来,封装好的包会被交给网络硬件,此时收到的是0、1组成的数字信息,然后网络硬件将数字信号转换成电信号或者光信号,并通过光纤发出去,然后这些信号会到达集线器、路由器等转发设备,再由转发设备一步一步送达接收方。返回的响应路径相反。
在这里插入图片描述
总结:
类比:TCP类似为老板,下发任务,IP为领导,负责项目分配,其他为工人,完成任务。
目的地址是TCP执行连接操作时从应用程序获得的,IP不会自行判断,即使应用程序指定错了,IP模块也只能照做,责任由应用程序承担。

9.网络重传机制:
TCP连接在对方未确认之前,发过的包都会保存在缓冲区中,如果对方没有回应,那么就重新发包专业术语”重传网络包“。如果发生网络中断或者服务器宕机,无论怎么重传都是无效的,此时TCP会尝试几次重传无效后强制结束通信,并向应用程序报错。

10.半双工和全双工:
全双工:收发操作同时进行。
半双工:同一时间只有发送数据或者接收数据的其中一个操作。

11.集线器的种类:
(1)中继式集线器:信号可以扩散到整个网络。
(2)交换式集线器:只会到达指定的设备。

12.TCP、IP为什么后来看成一个整体了?:
严格来说,TCP模块和IP模块负责各自的范围,TCP模块负责TCP头部,IP模块负责IP头部。但是当TCP模块接到包后,需要查询IP头部中接收方和发送方的IP地址来查找向相应的套接字,这就属于越权了。如果避免越权,应该进行明确的划分,但是这样的话,IP和TCP模块之间的交互过程成本很高,程序运行效率会下降。所以后来当作整体看待,更灵活。

以下为注意内容:
(1)TCP连接ACK的等待是比较灵活的,做成了动态计算的效果,根据网络包平均往返时间调整ACK的等待时间。解决了ACK相应慢,多余重传浪费资源的问题。
(2)通过ARP协议根据IP地址来查询MAC地址。
(3)查询MAC地址时需要ARP,MAC地址的写法:00-80-C8-2D-82-EA或者00:80:C8:2D:82:EA

发布了17 篇原创文章 · 获赞 55 · 访问量 4439
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章