网络是怎样连接的

 

 A记录的 A 是 address 的缩写

 

 

1.4 委托协议栈发送消息

应用程序是通过『描述符』这一类似号码牌的东西来识别套接字的,如果说描述符是用来在一台计算机内部识别套接字的机制,那么端口号就是用来让通信的另一方能够识别出套接字的机制。

 

第2章 用电信号传输 TCP/IP 数据——探索协议栈和网卡

 

 套接字的实体就是通信控制信息,协议栈根据套接字记录的控制信息来工作。

操作系统根据五元组来区分不同的套接字: [ 协议, 源ip,源port,目标ip,目标port ]

 

 

 

 

 

当数据包太大时,TCP会进行切包,每个包都加上 tcp header,里面有序号,代表数据偏移量,然后接收方可以 包总长度 - header 长度 = 数据包长度,

数据偏移量 + 数据包长度 = ACK 意思是 ACK 之前的包都已经完成接收

以及发送方建立TCP连接时, 发送SYN包时会随机生成一个序号,防止被攻击。

 

tcp有等待ack超时重发机制,因为ack包传输时间受 物理距离、网络拥塞情况影响较大,所以ack超时时间的设置需要动态调整

根据ack包返回的时间,返回的快,超时时间就短,返回的慢,超时时间就长。

等待ack返回的时间如果什么都不做就太浪费了。TCP 采用滑动窗口来管理发送数据包和等待ack。在发送一个包之后,不用等待返回,直接连续发送后面的几个包。

为了防止包的发送速率比处理速率快导致接收方缓冲区溢出的情况,接收方给发送方返回的ack包中会带有缓冲区可用的容量大小,发送方以这个大小为滑动窗口的大小

 四次挥手 time_wait 作用:为了防止最后一个ack丢失,导致FIN 重试,可能导致新的同样端口的套接字被意外关闭,time_wait 是为了ack丢失,FIN重试时仍然能够返回ack的状态。

 

IP 层

 

 

 tcp加tcp头部,ip加ip头部和MAC头部,发给网卡的是0/1信号,然后网卡把0/1信号转换成电信号或者光信号通过网线或者光纤传递出去。

IP 地址是分配给网卡的

 

 

 

 

 

 IP 模块根据路由表 Gateway 栏的内容判断应该把包发给谁(路由器ip地址,如果是自身地址的话代表可以直接给目标IP发送数据)

IP 模块在填写 IP 头部时的目的地址是由 应用程序 -> TCP -> IP 的

IP 模块在填写 MAC 头部时,发送方MAC地址是从网卡的 ROM(只读内存) 中读取的,而根据目的ip地址查询路由表可以得到路由ip地址,而没有路由的MAC地址,所以还需要一个 路由ip 到 路由mac 地址的映射。这个映射就是通过 ARP 实现的。通过在子网里广播查询某个ip的mac地址,对应ip会返回mac地址,由此得到路由的mac地址。

 

posted @ 2021-11-30 16:50  DSKer  阅读(147)  评论(0编辑  收藏  举报