电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

linux网络编程手记

linux网络编程手记_第1页
1/9
linux网络编程手记_第2页
2/9
linux网络编程手记_第3页
3/9
做 linu 下的网络编程有一段时间了,中间遇到过很多问题,其中不少是因为自己对网络编程和网络协议的一些基本概念搞不清楚,趁着今日没心情干活就把自己在网络编程方面的理解和一些经验总结一下,Request For ments 在诸多的网络协议中接触的最多也最紧密的无疑是 TCP 和 UDP,SCTP 之前因为项目原因也讨论过,不过最终由于方案修改给抛弃了,TCP 年代已经很久远,在网上的资料也非常多,而且我感觉它是一种非常复杂的协议,感觉要把编好基于 TCP 的程序光简单地了解几个 socket AP 是不够的,刚开始接触网络编程的时候自己确实也吃了不少苦头,后来我还专门拿时间出来阅读了一下 RFC,再加上长时间的实践总算也对 TCP 有所了解,把自己的一些经验和教训都总结一下。首先说一下 TCP 的状态转移图,这个应该是很重要的,了解 TCP 运行周期的各种状态才能更好地运用 netstat 之类的应用程序去对程序进行调试,我这里收藏了一*图,是 TCP 的状态图,记不清是从哪里找来的,也不知道直接该给谁,但这*图应该最终是出自于 UNP 第一卷的,那 copyright^是 UNP 了吧。1. TCP 连接状态连接建立的几个状态没什么可说的,TCP 的三次握手众所周知,更重要的是 TCP 连接中止的几个状态,应该可以说是连接中止需要四次握手吧。当 Clien 调用 close 函数主动关闭 socket 时,连接状态被标记为 FIN_WAIT_1,Server 在收到 FIN 之后 read 函数会返回 0,这里 server 知道 Client 已经关闭连接,回复 ACK,这里 clien 连接状态被标记为 FIN_WAIT_2,接下来 Server 调用 close 函数关闭连接,这时候 Server 向 clien 发送 FIN,Client 收到之后将状态标记为TIME_WAIT,并回复 ACK。TIME_WAIT 这个状态存在的意义在于 Client 回复的 ACK 未必会被 Server 收到,可能在传输过程中导致包的丢失,而这里 Server 未收到 ACK 之后会重新向 Clien 发送 FIN,假如 clien 未将状态标记为 TIME_WAIT 而是直接标记为 CLOSED,则 Server 发送的 FIN 会直接收到 RST,导致 Server 端的发送错误,因此 Client 需要保证有一个TIME_WAIT 状态,而这个状态会持续两位的 MSL(最大段生命周期),从而保证 Server 成功发送 FIN 并发送ACK,为了保证两个数据段传输的最大时间,因此 TIME_WAIT 持续的时间为两倍的 MSL。Server 在收到第一个 FIN 之后会将状态标记为 CLOSE_W...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

linux网络编程手记

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部