【Socket编程】Tcp连接中accept生成新socket与监听socket的区别
来源:互联网 发布:软件怎么申请专利 编辑:程序博客网 时间:2024/05/23 17:58
参考自:socket的accept函数解析以及服务器和多个客户端的端口问题(L未若的博客)
新建立的连接使用的端口号是否和listen所用端口号相同呢?
如果认为是会分配新的端口,就大错特错了。因为:
1、现在使用多路IO复用epoll等,配置好点的服务器可以支持数十万个并发连接,而端口号只有16位,最多才65535,且加上一些常用的端口号不能使用,可用的端口号都没那么多。
2、现在服务器大多使用防火墙,防火墙只对特定端口开放。如果accept随机分配端口号,会不能通过防火墙。
TCP/IP协议中,IP协议是端到端的协议,它只是负责把把数据发送到端,交付给上层而已。传输层TCP、UDP加上了端口号,目的是区分不同的应用。
现在才理解到accept返回的新socket包括四部分:源IP、源端口号、目的IP、目的端口号。这样在一个应用程序中,就算和多个客户端建立连接,在收到数据后,应用程序通过目的IP和目的端口号也能区分是哪一条连接。
用以前python写的web服务器实验一下:
服务器监听8888端口,在未建立连接时,可以看到在监听8888在通过一个客户端建立连接后,可以看到建立了一条连接,端口号也是8888,监听的还是8888。
再次建立一条连接,发现其端口号还是8888,监听的也还是8888。
另附一道鹅厂面试题:tcp三次握手与accpet()间的关系?
tcp三次握手发生在connect step.
accept只是把内核中的“已完成连接队列(FIFO with established state)”取出,
另一个队列是“未完成连接队列( FIFO with syn_rcvd state)”,并且这两个队列总和的最大值是backlog.
阅读全文
0 0
- 【Socket编程】Tcp连接中accept生成新socket与监听socket的区别
- WINDOWS SOCKET编程中accept出来的新连接是阻塞还是非阻塞
- Socket中listen/accept函数的区别
- Socket中listen/accept函数的区别
- Socket中listen/accept函数的区别
- Socket中listen/accept函数的区别
- Socket中listen/accept函数的区别
- Socket中listen/accept函数的区别
- TCP accept返回的socket,服务端TCP连接数限制
- TCP连接、HTTP连接与Socket连接的区别
- Socket编程上篇-----服务器监听与连接
- socket中TCP连接
- Socket与http、tcp客户端与服务器连接的区别!
- Socket与http、tcp客户端与服务器连接的区别!
- Socket与http、tcp客户端与服务器连接的区别!
- Socket与http、tcp客户端与服务器连接的区别!
- Socket与http、tcp客户端与服务器连接的区别!
- HTTP TCP SOCKET 连接之间的区别与联系
- final finalize finally的区别
- iOS 使用MBProgressHUD,显示时禁止用户交互方法
- html——jQuery练习题1
- HDU-5934 Bomb(强连通分量缩点)
- 解决Request method 'GET' not supported问题
- 【Socket编程】Tcp连接中accept生成新socket与监听socket的区别
- linux下ADC驱动(AD7606)
- dbcp数据源配置杂谈
- 从今天开始写会不会太晚
- 监听CheckBox是否被选中
- javaweb中文乱码问题及解决办法
- Akka(26): Stream:异常处理-Exception handling
- 如何撰写一份合格的产品需求文档PRD?
- maven安装