网络是怎么连接的系列--用电信号传输TCP/IP连接

用电信号传输TCP/IP连接
1、创建套接字
协议栈内部:
应用程序: 网络应用程序 (浏览器,web,邮件服务器等)
secokt库 解析器

操作系统: 协议栈
TCP (需要连接) UDP(无连接)
IP(传输网络包,确定路由)
ICMP
驱动程序: 网卡驱动程序(控制网卡)

硬件: 网卡

UDP和TCP的用途:
TCP主要用于浏览器,邮件服务器的应用程序的收发数据
UDP主要DNS查询等收发较短的控制数据

在tcp和udp协议下方,使用IP协议进行网络包的收发操作。IP会将网络包发送到对应的通信对象
(互联网传输时,数据会被分解成一个个的网络包)
IP协议中还包含ICMP和ARP协议
ICMP协议:告知传输过程中的错误及各种控制消息
ARP协议:根据ip地址查询相应的以太网MAC地址
网卡驱动程序控制网卡
网卡完成实际的数据收发
Socket连接部分
DNS查询后,浏览器委托协议栈使用TCP收发数据,
协议栈会分配一块空间,为套接字使用,在收发数据还没开始时,需要向套接字中写入表示初始状态的控制信息
Socket步骤:
创建套接字----->连接------->收发数据------>断开连接(删除套接字)

2、连接
连接:是通信双方在收发数据前的准备活动,双方互换信息(控制信息IP,端口等),
在收发数据前需要临时存放数据的内存空间(缓冲区)连接过程中分配。(套接字就是通信双方的中间人)
控制信息分为两类:
客户端和服务端相互联络时的交换的控制信息:
不仅在连接时用到,收发,断开等各个阶段(一直存在),就是通常的信息头(tcp头,ip头等)
一个网络包的组成:以太网和ip控制信息(头)----TCP控制信息------数据块
连接和断开时网络包中没有数据块

保存在套接字中用来控制协议栈操作的信息

协议栈在不同的系统中的实现方式千差万别,但是主要的信息都是共通的(ip和端口号等),这也是不同系统之间通信的基础。
连接操作的实际过程(三次握手的过程):
在tcp模块处创建表示连接控制信息的头部
通过TCP头部中的发送方和接收方端口号可以找到要连接的套接字
TCP创建好后会将信息委托给IP模块进行发送
服务端IP模块接到包后传递给TCP模块
TCP模块根据头部找到端口,并将套接字状态改为正在连接
如果不接受连接会将RST设置为1,不会设置SYN

3、收发数据
将http请求消息交给协议栈
数据收发操作是从应用程序调用write将要发送的数据交给协议栈
协议栈不关心数据内容,应用程序调用write时会指定发送数据的长度,对于协议栈数据就是二进制流
协议栈不是一收到数据就马上发送出去,而是会放在发送缓冲区
(主要是因为发送数据的长度由应用程序设定,应用程序的内部实现不同数据交给协议栈的方式不同,为了提高效率协议栈会放在缓冲区,让一次网络io发送更多的数据)
发送数据的大小:
根据每个网络包的容量(MTU来确定,以太网中一般是1500字节(需要减去头部MSS))
根据时间进行判断,协议栈内部有一个计时器,时间到就会发包
协议栈保留有控制发送时机的余地
较大数据会进行拆分并编号与添加协议头
使用ACK来保证包的顺序性
根据ACK的往返时间来调整ACK等待时间,防止网络拥塞后数据的重传(避免更严重的拥塞)
为了避免在等待ACK返回的时间过长(引入了滑动窗口机制)
不等待ACK返回连续发包(会根据网络情况对窗口大小进行调整)

ACK与窗口合并:
发送方会每次发送后都计算自己的剩余长度。更新窗口的时机是接收方从缓冲区中取数据传递给应用程序的时候
发送方的数据到大接收方,在完成操作后需要返回ACK号,不会经过一段时间去告知发送方修改窗口大小,
因此是在返回包的时候就将发送ACK和窗口更新在一个包中返回(会等待一段时间)
1、滑动窗口与接收缓冲区:
接收方 发送方

接收缓冲区(4380字节) -------> 接收缓冲区剩余空间(4380)
接收方 <——— 发送1460字节(剩余2920)

接收缓冲区 剩余0时停止发送
接收程序取出(后重复上面的步骤)

2、数据双向传输情况:
服务器发送给客户端的数据 客户端给服务端的
<–客户端的序号初始值
服务器的数据初始值–>
<–客户端的序号
服务器的ACK号–>

服务器已接收到的数据 客户端收到的数据

3、序号与ACK的交互:
<–连接操作时ACK初始值
ACK号 序号初始值–>
<–ACK号
<–序号+数据

4、从服务器断开并删除套接字
1、数据发送完毕后断开连接
发送完毕的时间点:应用程序判断所有数据都发送完毕
断开的时机:会根据具体实现进行选择,有服务端断开,也有客户端主动断开,协议栈允许任何一方主动断开
2、删除套接字
删除套接字:不会立即删除,一般会等待一段时间,具体时间和重传机制决定,防止引发误操作
滑动窗口的大小是由接收方告知发送方的,是双向进行的,每次数据传输(发包)都会有窗口的大小
窗口大小的更新和序号,ack号都是双向进行的

5、ip与以太网包的收发
1、包
包:头部和数据组成
头部:主要包含目的地址等控制信息
数据:是要发送的实际数据
过程:发送方的网络设备创建包,并生成正确的头部
一个完整的以太网包包含
Mac头部(以太网控制信息) ip头部(ip控制信息) tcp头部 数据(内容)

MAC和IP的关系与区别:
1、IP地址是根据网络拓扑结构分配的(可更改,但必须唯一),MAC由制造商分配,全球唯一,不可更改
2、寻址协议层不同,ip是网络层(第一层),MAC是数据链路层(等二层)
3、在传输过程中MAC头部会被替换成下一个的网络设备的mac信息,ip地址不会被替换
4、ip协议表查下一个路由,并将该路由的mac信息记录到mac头部(改写)

路由器和集线器
1、路由器根据目标地址将判断下一个路由的位置(根据IP规则传输)
2、集线器在子网中将包 传输到下一个路由(根据以太网规则传输)
2、IP模块
IP模块对包添加Ip头和Mac头等信息
IP模块对于任何包的收发都是相同的,IP模块不关心包的具体内容
IP头部主要包含目标的ip地址,ip地址来源于应用程序,IP模块不会检测ip地址是否正确
Ip和网卡的匹配是通过IP表(路由表),进行部分匹配的
MAC头部:包含接收方和发送方的mac,以太类型
IP头部:包含发送方和接收方的ip,发送方需要判断发送所使用的网卡,并填写网卡的ip地址

IP地址和MAC:
其中IP地址代表了一个地方,(快递单号的地址)
MAC代表具体的那个网卡(姓名和电话)

接收方的MAC获得:
ARP协议提供IP地址和MAC地址之间的映射关系
ARP中有一个内存空间中会保存查询过的IP和MAC的对应关系,然而内存空间
中保存的内容会在几分钟后删除,防止内存满了,删除后会重新获取

整个打包工作由IP模块完成,将MAC头放入包头后整个包就完成了。

3、以太网
以太网的基本结构
1、以太网原型
主干线-------收发器-------收发器网线-------机器
2、中继式集线器的变体
中继式集线器--------双绞线---------机器
3、交换式集线器的结构
交换式集线器-------机器

以太网的三大性质:
将包发送到MAC头部的接收方MAC地址代表的目的地
用发送方地址识别发送方
用以太类型识别包的内容
以太和IP一样不关心包的实际内容。
网卡发送出去的包:
MAC模块会将包从缓冲区取出,并在开头加上报头和起始桢分节符,在末尾加上用于检测错误的FCS(帧校验序列)

4、收包操作
信号的开头报头------起始帧分节符-------将后面的转为数字信号-------检查FCS
FCS没问题时判断接收方MAC地址和网卡中的MAC是否一样,用来判断包是否是发给自己的
不是:舍弃包
是:网卡通知计算机收到一个包,计算机会使用中断机制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值