TCP/IP网络编程第四章读书笔记
2022/6/12 1:20:19
本文主要是介绍TCP/IP网络编程第四章读书笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第四章 基于TCP的服务器端/客户端(1)
4.1 理解TCP和UDP
因为TCP套接字是面向连接的,因此又称基于流(stream)的套接字。
TCP/IP协议栈如下:
可以看出在协议栈中,数据收发分为了4个层次化过程,将协议分为多个层次,不仅设计容易,并且可以通过标准化操作设计开放式系统。自底向上查看TCP/IP协议栈,最底层的链路层是物理链接领域标准化的结果;IP层解决在网络中传输数据的路径选择问题,IP本身是面向消息的不可靠的协议,每次传输时会选择路径,但并不一致,如果发生数据丢失或错误则无法解决,IP层无法应对数据错误;TCP/UDP层又称传输层,它们在IP的基础上完成数据传输,TCP通过自身的确认机制和重传机制能够保证在不可靠IP层上的可靠数据传输;套接字就位于应用层,程序员只需要编写应用层协议的程序,网络编程的大部分就是设计并实现应用层协议。
4.2 实现基于TCP的服务器端/客户端
TCP服务器端的函数调用顺序如下:
socket和bind函数已讨论过,服务器端调用listen函数进入等待请求状态,只有调用了listen,客户端才能进入可发出连接请求的状态,此时服务器端的套接字就像一个门卫一样,将发出连接请求的客户端都放入等待队列。
在等待请求后就应该受理请求,这时需要套接字来实现数据交换,但服务器端的套接字正在做门卫(一直监控有没有发出连接请求的客户端),因此需要一个额外的套接字来和客户端通信,accept函数自动创建套接字并连接到客户端。
TCP客户端的调用函数只有connect函数不相同,客户端在调用此函数后,只有服务端接受连接请求或连接请求中断才会返回。接受连接并不意味着服务端accept此客户端,而是进入了等待队列。同时,客户端的IP和端口在connect时自动分配,无需调用bind函数。
两者的函数调用关系如下
客户端只有在服务端调用listen后才能connect,但服务端此时可能已经调用accept进入blocking状态,直到客户端调用connect。
4.3 实现迭代服务器端/客户端
设置好等待队列后,应将所有请求都受理,最简单的就是循环调用accept函数,调用了close后就结束了和某个客户端的连接。
这篇关于TCP/IP网络编程第四章读书笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升