Linux-网络编程
■ 网络结构
■ C/S结构
客户机-服务器(client-server)结构。服务器完成对数据的管理,客户机完成与用户的交互任
务。
■ B/S结构
B/S结构(浏览器、服务器模式)是web兴起后的一种网络结构模式,
■ 网络模型
■ OSI七层模型
■ TCP/IP四层模型
如果两台计算机在不同的网段中。那么数据从一台计算机到另一台计算机传输中要经过一个或多个路由器。
■ TCP
■ TCP通信流程
■ TCP三次握手
第一次握手:
1.客户端将SYN标志位置为1
2.生成一个随机的32位的序号seq=J ,这个序号后边是可以携带数据(数据的大小)
第二次握手:
1.服务器端接收客户端的连接:ACK=1
2.服务器会回发一个确认序号: ack=客户端的序号+数据长度(上图中假设传输数据为0,仅SYN占据了一个字节)+SYN/FIN(按一个字节算)
3.服务器端会向客户端发起连接请求: SYN=1
4.服务器会生成一个随机序号:seq =K
第三次握手:
1.客户单应答服务器的连接请求:ACK=1
2.客户端回复收到了服务器端的数据:ack=服务端的序号+数据长度+SYN/FIN(按一个字节算)
seq为序号,ack为确认序号。仅当SYN=1的时候,序号seq才有用。同理,仅当ACK=1的时候,确认序号ack才有用。
为什么是3次握手呢?
通过3次握手才能够确定客户端的发送数据、数据数据的功能正常。服务器端的接收数据和发送数据正常。2次握手显然无法证明,比如客户端端发送SYN连接请求,服务器端回应ACK报文并发送,那么只能证明客户端发送数据正常,接收数据的能力不能确定。4次握手也可以达到,但是3次就能搞定,多花费一次没有必要。并且在三次握手的过程中,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸。
■ TCP四次挥手
- 客户端发送FIN位表示关闭连接的请求
- 服务器应答客户端的关闭连接请求
- 服务器处理完缓冲区中的数据后(做出了相应的应答),向客户端发送FIN表示关闭连接
- 客户端应答服务器的关闭连接请求
■ 套接字:socket = 主机IP + 主机上的进程(端口号)
标识网络中的唯一一个进程
socket实际上是一个文件描述符,只不过文本描述符走的是io,而socket走的是网络;
■ TCP传输文件
- 先发送文件名,和文件大小,在发送文件内容,当接收到大小和文件一样大小一样就知道文件发送完成。
- 接收端为新建文件,在将内容追加到文件中, 就算文件发送完成。