当前位置: 首页 > news >正文

计算机网络(一些知识与思考)

1.应用层,首先在应用程序中,只涉及到用户态,在这里我们如果调用其他的接口(有点类似于在网站上输入url),网络库会帮我们解析url请求,解析之后会封装成请求报文。注意这里:这里如果是域名的话,还需要使用DNS域名解析系统将域名对应的ip地址解析出来!

2.传输层,通过socket提供的接口(用户态->内核态),将我们请求报文的数据拷贝到socket的缓冲区中(sk_buff),其实这里是会将数据拷贝一份的(用于后面的消息重传)然后将数据交给协议栈来处理,注意这里,如果两个节点之间没有建立TCP连接的话,这里会先三次握手建立TCP连接。连接之后,会封装TCP包,比如说一些关键属性:源端口号、目标端口号、序列号、确认序列号、标志位(ACK、SYN、FIN、RST等)、滑动窗口(流量控制),注意这里:TCP包中的数据部分有一个最大上限,MSS(最大报文段长度,类似的还有MTU)

3.网络层,封装ip数据报,源ip地址,目的ip地址,这里如果ip数据报的数据部分最大为1MTU(1500字节),超出的话是会分片的!补充一下:如果MTU设计的太小的话,网络吞吐量是会受到影响的!因为这样ip数据报首部就会多出来,这样数据传输有效量就变少了!注意这里:网络层中会包括寻址和路由两部分的。寻址就根据目的IP地址子网掩码进行按位与操作,然后计算出来网络号;然后取反目的IP地址子网掩码进行按位与操作,计算出来主机号!(是这样的,本来每一个主机都有一个IPv4或者IPv6地址,但是根据ip寻找的效率太低了,所以会先寻找在哪个子网中,然后再去寻找主机!)

4.网络接口层,光有ip地址还是不行的, 在以太网中,必须还要有发送方和接收方的mac地址,发送方的mac地址比较容易获得,接收方的mac地址还需套通过ARP协议来获得。然后添加mac头和尾,封装为数据帧。

5.然后触发软中断告知网卡驱动程序,(驱动程序相当于一个接口来操作我们的硬件的),将sk_buff中的数据拷贝到RingBuffer中,然后将数据拷贝到网卡可以直接访问到的DRA内存区域,网卡就要发送了

补充一下:如果我们的客户端在收到ack之后,那我们sk_buff中的数据就可以清理了。然后该连接还可以继续用


文章转载自:

http://I6KXjQUE.pghry.cn
http://ncqZsIMO.pghry.cn
http://Bk2aELGM.pghry.cn
http://5aXvWtD9.pghry.cn
http://QeSR4TEb.pghry.cn
http://soJKod0S.pghry.cn
http://KWA8mXLl.pghry.cn
http://LMc2GTvx.pghry.cn
http://yK393wfV.pghry.cn
http://O06obx31.pghry.cn
http://V6DYFo5Y.pghry.cn
http://QLxw85AA.pghry.cn
http://jYWI4Uck.pghry.cn
http://foVbWLba.pghry.cn
http://ZG9Fqjw5.pghry.cn
http://p1JyiR7X.pghry.cn
http://lJ4RUQ16.pghry.cn
http://aKXXGIPH.pghry.cn
http://1NzzvUmY.pghry.cn
http://f8aDD7hd.pghry.cn
http://qZSFLlcF.pghry.cn
http://hLOYepP4.pghry.cn
http://n9cJf8v3.pghry.cn
http://NxL62LcB.pghry.cn
http://reQMoZ0i.pghry.cn
http://EIvYsUAb.pghry.cn
http://c2WEXFJx.pghry.cn
http://CXuise5X.pghry.cn
http://IzqRyQo9.pghry.cn
http://kAFLLoT7.pghry.cn
http://www.dtcms.com/a/385343.html

相关文章:

  • 【开题答辩全过程】以 4s店汽车销售系统为例,包含答辩的问题和答案
  • Redis MySQL小结
  • [SC]在SystemC中,如果我使用了前向声明,还需要include头文件吗?
  • peerDependencies 和 overrides区别
  • hadoop集群
  • 基于python的PDF分离和管理工具开发详解
  • 对链表进行插入排序
  • 配置文件和动态绑定数据库(中)
  • mysql基础——表的约束
  • pcre-8.44-2.ky10.x86_64.rpm怎么安装?CentOS/Kylin系统RPM包安装详细步骤(附安装包)
  • TDengine 聚合函数 COUNT 用户手册
  • STM32F103C8T6开发板入门学习——点亮LED灯
  • K-means 聚类算法:基于鸢尾花数据集的无监督学习全流程解析
  • JVM新生代/老年代垃圾回收器、内存分配与回收策略
  • 介绍一下 RetNet
  • rt-linux下__slab_alloc里的另外一处可能睡眠的逻辑
  • 如何统计DrawMeshInstancedIndirect绘制物体的Triangle数据
  • Android音视频学习路线图
  • 深入理解C语言指针(一)| 从内存到传址调用,掌握指针的核心本质
  • 代码审计-PHP专题原生开发文件上传删除包含文件操作监控Zend源码解密1day分析
  • springboot与vue中webSocket前后端连接问题
  • 数据结构——顺序存储链式存储
  • Vue 脚手架与webpack
  • pytest单元测试框架
  • CentOS7.9绿色安装mysql5.7.44
  • Cell Biology Learning Track(I)膜结构
  • 医院用的桌面管控软件有哪些?适用于医院的桌面管控软件推荐
  • 异步编程三剑客:回调、闭包与Promise组合实战
  • MySQL 主从同步(复制)实战
  • redis面试点记录