端口数能否超过65535

文章来自:百度空间-sunzn's Blog

下图显示的终端端口为 78650  ,那么端口数能否超过 65535 呢?

因为 TCP PORT 大小为 16 bit ,所以不能超过 65535 。

不过 Windows 会有一个问题,telnet www.sina.com.cn 65616 大家可以测试一下,这实际上是访问 www.sina.com.cn 的 80 端口,为什么呢?

注:65616 - 65536 = 80

以下是引用片段:

main()
{
    unsigned short int tcp_port=65616;
    printf("%u",tcp_port);
}

有 些软件,比方说 Windows 的 Telnet ,可能用了 32 bit 的数据类型记录 port ,这样 port 表面上看到是可以超过 65535 ,但是 tcp header 明确定义了 tcpport 为 16 bit,那即便某些应用程序使用了 32 bit 的数据类型,最终结果也是被强制转换。

简单的来说就是:

1、在应用程序里边可以使用4字节或更多字节来储存端口号。

2、当调用了系统的tcp/ip通讯之后,系统底层强制将大于65536的端口转换回正常范围。

3、并且在转换过程中,不会返回任何错误信息,一切都悄然进行了,所以应用层的程序不会有任何特别反应,这一切都在系统底层悄然完成了。

4、转换的方式为:端口号 - 65536 = ?,问号处既是转换结果。

5、如果转换后的端口还超过65535呢?那就继续转换,直到小于等于65535为止,所以 telnet www.baidu.com 131152 也是可以完美执行的,(65536 + 65536 + 80 = 131152)。

posted @ 2013-02-21 21:30  学海无涯1999  阅读(2311)  评论(0编辑  收藏  举报