为什么TCP首部的开始便是源和目的的端口号?
来源:互联网 发布:哪儿找php.ini 编辑:程序博客网 时间:2024/06/04 19:10
今天再次看了看 TCP/IP详解 发现这个问题。我的理解是这样的。
考虑:
首先,TCP协议针对的单波的数据传输,从A~B的数据传输, 但是呢,可以在A~B之间建立很多链接。
其次,每个链接有自己的序列号等等相关参数,那么同样是A~B之间的数据,为了准确的去ACK,重传等等动作,内核里肯定要分别的有每个的接收或者发送队列参数的维持。
最后,你会发现这些链接如果用 源地址和目的地址 想要区分出链接来是不可能的,因为都是 A~B ,所以,最后就只剩下端口可以区别他们了。
另外从效率的角度:
如果包的最开始不是这个可以区别不同链接的参数(端口),那么必定在内存寻址上,你会先偏移一部分,去读比如FIN标记或者序号啥的,然后再往后偏移去读源端口信息。 这样势必比起,只读出前4个字节(本来对CPU来讲,一次往往就是读4个字节或者它的倍数)判断下,就可以唯一标识链接了。
马上就可以把数据分发到各个链接自己的比如收发队列了。
这样的效率最好!
以上就是我的理解。
- 为什么TCP首部的开始便是源和目的的端口号?
- TCP首部的URG和PSH
- TCP的首部
- TCP首部的数据格式
- TCP/IP学习一 (IP首部和TCP首部的定义)
- 关于Donews的记忆---昨天便是开始
- TCP首部中的URG和PSH的区别和联系
- TCP报文首部中URG和PSH的作用
- TCP报文首部的URG和PSH字段
- TCP报文首部URG和PSH的区别
- 为什么 tcp/udp 的端口号可以重复
- 什么是源端口和目的端口
- TCP的首部的详细剖析(转)
- TCP服务和首部
- TCP和UDP的端口
- 源目的IP和端口都相同的连接出现的原因
- tcp首部中的标志位的含义
- TCP报文段的首部格式
- C语言中string函数详解
- Python利用dict构造数据库(mysql)的插入语句
- Grails scaffold 的中文化。
- 纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat)
- 楚辞#2:知识的可视化探索
- 为什么TCP首部的开始便是源和目的的端口号?
- Grails 控制查询范围的scaffold
- VC6.0调用Matlab Dll的方法
- 【MoreWindows工作笔记5】StrFormatByteSize64 高端大气的显示文件大小
- 关于float,double的精度丢失
- 杂谈1
- Spring3定时器
- class id区别
- 下载ADT