内容:
第4章 基于TCP的服务器/客户端(1)
第5章 基于TCP的服务器/客户端(2)
四层网络协议-
链路层:物理链接协议
IP:处理数据包传递的协议,包括根据数据包中的目标IP选择数据传输路径。
注意:两个数据包可能会经过不同的路径到达相同的目的地;并且IP不保证数据包不丢
TCP:在IP协议之上通过ACK和重传保证数据包不丢,但数据包没有边界。
应用层协议:主要用于解决TCP协议下数据无边界的欠缺。
基于TCP的服务器/客户端函数调用关系
- 服务器执行listen()之后即开启一个守护进程,接受客户端的连接请求;
- 被接受的客户端请求会被放在服务器的请求队列中等待服务器调用accept()来处理;
- 调用accept()后建立新的socket连接,不会占用守护进程的套接字;
- 客户端调用的connect()在服务器被接受之后即得到返回,不管服务器端有没有执行accept();
- 服务器accept()是阻塞方法,所以如果服务器希望同时处理多个客户端请求那么需要启用多线程;
- socket连接终止可以由任何一方发起;
- socket中的read/write方法都是和本地的socket buffer交互,不和对方直接交互,这就是为什么UNIX把socket当成文件一样的处理;
- 写入socket buffer中的数据由操作系统处理,比如输出缓冲中的数据会被写入到对方的输入缓冲,对socket编程透明;
- write方法将数据写入缓冲后就返回不会等待操作系统把数据送到对方缓冲中,除非对方一直不读造成了对方缓冲满进而自己的缓冲也满的情况;
- 关闭socket连接时输出缓冲中的数据会被继续发出,但输入缓冲中的数据将丢失;
TCP内部工作原理
与对方套接字的连接 - 三次握手
与对方主机的数据交互
断开与套接字的连接 - 四次握手
注:本文所有图片均来自《TCP/IP网络编程》一书。