【程序设计艺术】TCP和UDP为何可以共用同一端口

【程序设计艺术】TCP和UDP为何可以共用同一端口,第1张

网络七层协议

其中,传输层:

同一台机器的同一个端口只可以被一个进程使用,一般用于tcp,或者udp。那一个进程使用同一个端口同时监听tcp、udp请求,是否可以呢?

答案:可以。

端口可以形象地比喻成 *** 作系统上的编号唯一的文件,应用程序和网络协议可以对其进行i/o *** 作。

但是既然唯一又为何tcp udp可以用相同的端口号呢?这样的话,程序在连接到端口时,怎么知道此时从该端口进来的数据是tcp的还是udp的呢?

是不是可以这样理解?端口的唯一性的标识不是端口号,而是端口号和协议名称的组合,应用程序和协议寻址时就是靠的这个组合?

使用netstat -an自己看看就知道了,IP数据包首部有个叫做协议的字段,指出了上层协议是TCP还是UDP还是其他P。

协议字段(报头检验和前面那个),其值为6,则为TCP;

其值为17,则为UDP。

*** 作系统有能力根据接受的报文的IP字段里面的协议部分判断这个报文是什么报文。

就是说,系统读数据的时候还没有读到上层报文(TCP/UDP)的时候已经知道上层是什么报文了,直接交给相关的内核进程或协议栈处理就可以了。而在同一个协议内部端口号唯一。

从网络层的角度来看,它是不知道端口这个概念的,tcp\udp都是包裹在ip协议内的,ip协议只需要知道ip对应的硬件地址就可以把远端的网络包发送到目的主机上。

端口这个概念是由 *** 作系统划分的。因为内核不可能把所有网络数据都发送给所有的进程,所以为了区分哪些数据该划分给哪些进程,便在传输层的协议中定义了端口。而tcp和udp协议中的端口号占位都是16位,所以 *** 作系统能绑定的端口也就只有65535个。这也解释了为什么linux里设置单个进程所能打开的最大文件描述符数量最好设置为65535。关于文件描述符和端口又有什么关系,下面会进行说明。

这里需要用c语言的系统函数去解释:

这个函数用来创建socket套接字描述符也就是文件描述符。

其中type参数:

SOCK_STREAM —— TCP协议

SOCK_DGRAM —— UDP协议

SOCK_SEQPACKET —— ipx/spx协议

而返回的int值就是一个非负的文件描述符fd。linux内核中维护了一份文件描述符表,如下图,来存储文件描述符fd。

这个函数用来绑定端口,socket参数就是fd,而sockaddr则是一个套接字地址结构。

sockaddr结构如下:

可以看到linux是以协议、ip、端口来绑定端口的,所以不同协议相同的ip和端口也是可以绑定成功的。

https://www.jianshu.com/c/498ebcfd27ad

首先总的原则是:你如果用最难的方式学,你会收获最多。

并且最难的方式就是:你读它,如果遇到一个问题,一个定理,一个例子,没搞懂,不要再继续看,不要看答案,把书合起来,然后绞尽脑汁地想,用几个小时几天时间,把它搞定,然后再继续看书,看答案。

方式训练,你可以最快地在思维上跟TAOCP看齐并且必须做题,例题,习题,题题过,这本书只适合有耐心有毅力能抽出几个月闭关什么都不做专门学习这本书的人。

《计算机程序设计艺术》系列被公认为计算机科学领域的权威之作,深入阐述了程序设计理论,对计算机领域的发展有着极为深远的影响。

MMIX 是新一代的以 RISC 为基础的计算机,比其前身 MIX 更加精简。

本书由两本小册子合并而成,第一部分描述了 MMIX 的内存、寄存器、指令、加载与存储等基础概念,并介绍了关于 MMIX 的一些基本编程技术。

第二部分使用该语言重新实现了 TAOCP 前 3 卷中的所有算法。

《The Art of Computer Programming, Volume 3》(Donald E. Knuth)电子书网盘下载免费在线阅读

链接:https://pan.baidu.com/s/1f4zTt0A7ZgscVDfBbyrc5Q

提取码:ys57

书名:The Art of Computer Programming, Volume 3

作者:Donald E. Knuth

出版社:Addison-Wesley Professional

出版年份:1998-05-04

页数:800

内容简介:

Finally, after a wait of more than thirty-five years, the first part of Volume 4 is at last ready for publication. Check out the boxed set that brings together Volumes 1 - 4A in one elegant case, and offers the purchaser a $50 discount off the price of buying the four volumes individually. The Art of Computer Programming, Volumes 1-4A Boxed Set, 3/e ISBN: 0321751043

作者简介:

Donald.E.Knuth(唐纳德.E.克努特,中文名高德纳)是算法和程序设计技术的先驱者,是计算机排版系统TEX和METAFONT的发明者,他因这些成就和大量创造性的影响深远的著作(19部书和160篇论文)而誉满全球。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/10950891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存