zoukankan      html  css  js  c++  java
  • 网络是怎样连接的

     

     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地址。

  • 相关阅读:
    在Ubuntu/Centos使用 Let's Encrypt 证书部署 HTTPS的方法
    Ubuntu14.04安装配置LAMP环境(php5.6)
    centos6 php5.4 升級到php 5.6
    为自己的2017年定个计划
    收益的一些话
    学习瓦力部署系统的项目配置和上线部署
    统计进仓和出仓数量随时间变化的剩余数量流程图
    Codeigniter 获取当前的控制器名称和方法名称
    [记]Windows 系统下设置Nodejs NPM全局路径
    [记]Cordova安装插件选择插件版本
  • 原文地址:https://www.cnblogs.com/DSKer/p/15624946.html
Copyright © 2011-2022 走看看