how networks work second note
2019-02-13 本文已影响0人
Rechard_Jones
思维导图
用电信号传输TCP/IP数据--探索协议栈和网卡
问题总结
现在使用的以太网中存在不符合国际标准的部分
TCP/IP是由TCP和IP两个协议的名字组合而成的,最早这两个协议合在一起的
网络包通信技术是20世纪60年代为用计算机进行数据通信而设计出来的
看点
(1)创建套接字阶段
介绍协议栈的内部结构、套接字的实体、以及创建套接字的操作过程
(2)连接服务器
客户端套接字向服务器套接字进行连接的阶段
(3)收发数据
协议栈将从应用程序收到的数据切换成小块并发送给服务器,考虑到通信过程中可能会出错导致网络
包丢失,协议栈还需要确认切分的出的每个包是否已经送达服务器,对于没有送达的包要重新发送一次
(4)从服务器断开连接并删除套接字
(5)IP与以太网的收发操作
协议栈会将网卡进行配合,将数据切分成小块并封装成网络包,再将
网络包转换成电信号或者光信号发送出去。
(6)用UDP协议收发数据的操作
创建套接字
应用程序使用Socket库,其中包括解析器,解析器用来向DNS服务器发出查询
操作系统内部即协议栈部分:
上半部分负责用TCP协议收发数据的部分和负责用UDP协议收发数据的部分
浏览器、邮件等一般应用程序收发数据时用TCP
DNS查询等收发较短的控制数据时用UDP
下半部分是用IP协议控制网络包收发操作的部分,数据会被切成一个一个的网络包,
而将网络包发送给通信对象的操作就是由IP负责
IP还包括ICMP协议和ARP协议。
ICMP用于告知网络包传送过程中产生的错误以及各种控制信息
ARP用于根据IP地址查询相应的以太网MAC地址
套接字的实体就是通信控制信息
存放控制信息的内存空间就是套接字的实体,例如通信对象的IP地址、端口号、通信操作的进行状态等
在Windows中可以用netstat命令显示套接字内容,每一行相当于一个套接字
netstat -ano
netstat是用于显示套接字内容的命令,-ano选项表示下面的意思
a 不仅显示正在通信的套接字,还显示包括尚未开始通信等状态的所有套接字
n 显示IP地址和端口号
o 显示使用该套接字的程序PID
调用socket时的操作
创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态
需要将表示这个套接字的描述符告知应用程序
连接服务器
- 连接的意思
我们需要把服务器的IP地址和端口号等信息告知协议栈
客户端向服务器传达开始通信的请求
当执行数据收发操作时,我们还需要一块用来临时存放要收发的数据内存空间,这块空间称为缓存区,
它也是在连接操作过程中分配的
- 负责保存控制信息的头部
第一类是客户端和服务器相互联络时交换的控制信息
第二类是保存在套接字中,用来控制协议栈操作信息
- 连接操作的实际过程
客户端先创建一个包含表示开始数据收发操作的控制信息的头部,且把SYN比特设置为1(表示连接)
TCP模块会将信息传递给IP模块并委托它进行发送。
服务器返回响应,将TCP头部中设置发送发和接收方端口号以及SYN比特,还需要将ACK控制位设为1.
传送到客户端如果SYN为1则表示连接成功,客户端需要将ACK设置为1,并响应服务器
收发数据
- 将HTTP请求消息交给协议栈
若HTTP请求消息过长,将进行拆分
- 使用ACK号确认网络包已收到
客户端在连接时需要计算出与从客户端到服务器方向通信相关的序号初始值
如果对方没有返回某些包对应的ACK号,那么就重新发送这些包
通过"序号"和"ACK号"可以确认接收方是否收到了网络包
- 根据网络包平均往返时间调整ACK号等待时间
- 使用窗口有效管理ACK号
- ACK与窗口的合并
- 接收HTTP响应消息
从服务器断开并删除套接字
数据发送完毕断开连接
删除套接字
IP与以太网的包收发操作
- 包的基本知识
集线器是根据以太网协议工作的
路由器有IP协议表
- 包收发操作概览
IP模块负责添加如下两个头部
(1)MAC头部: 以太网用的头部,包含MAC地址
(2)IP头部:IP用的头部,包含IP地址
无论要收发的包是控制包还是数据包,IP对各种类型的包的收发操作都是相同的
- 生成包含接收方IP地址的IP头部
- 生成以太网用的MAC头部
- 通过ARP查询目标路由器的MAC地址
- 以太网的基本知识
- 将IP包转换成电或光信号发送出去