【Linux-网络编程】

Linux-网络编程

  • [■ 网络结构](#■ 网络结构)
    • [■ C/S结构](#■ C/S结构)
    • [■ B/S结构](#■ B/S结构)
  • [■ 网络模型](#■ 网络模型)
    • [■ OSI七层模型](#■ OSI七层模型)
    • [■ TCP/IP四层模型](#■ TCP/IP四层模型)
  • [■ TCP](#■ TCP)
    • [■ TCP通信流程](#■ TCP通信流程)
    • [■ TCP三次握手](#■ TCP三次握手)
    • [■ TCP四次挥手](#■ TCP四次挥手)
  • [■ 套接字:socket = 主机IP + 主机上的进程(端口号)](#■ 套接字:socket = 主机IP + 主机上的进程(端口号))
  • [■ TCP传输文件](#■ TCP传输文件)

■ 网络结构

■ C/S结构

客户机-服务器(client-server)结构。服务器完成对数据的管理,客户机完成与用户的交互任

务。

■ B/S结构

B/S结构(浏览器、服务器模式)是web兴起后的一种网络结构模式,

■ 网络模型

■ OSI七层模型

属性 描述
应用层: 网络服务与最终用户的一个接口。这一层为用户的应用程序(例如电子邮件、文件传输和 终端仿真) 提供网络服务。
表示层: 即带来格式化的表达和变换数据服务。数据的压缩和解压缩,加密和解密等工作都由表示层承担。
会话层: 通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求。
传输层: 定义了一些传输数据的协议和端口号。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这 一层数据叫做段。 传输层负责端到端的传输(源主机和目的主机)。 传输层可选择TCP或UDP协议
网络层: 路由器 路由器需要将进来的数据包拆掉网络层和数据链路层两层首部并重新封装. IP协议不保证传输的可能性,数据包在传输过程中可能丢失,可靠性在上层协议或应用程序中提供支持。
数据链路层: 交换机
物理层: 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。这一层的数据叫做比特。

■ 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四次挥手

  1. 客户端发送FIN位表示关闭连接的请求
  2. 服务器应答客户端的关闭连接请求
  3. 服务器处理完缓冲区中的数据后(做出了相应的应答),向客户端发送FIN表示关闭连接
  4. 客户端应答服务器的关闭连接请求

■ 套接字:socket = 主机IP + 主机上的进程(端口号)

标识网络中的唯一一个进程

socket实际上是一个文件描述符,只不过文本描述符走的是io,而socket走的是网络;

■ TCP传输文件

  1. 先发送文件名,和文件大小,在发送文件内容,当接收到大小和文件一样大小一样就知道文件发送完成。
  2. 接收端为新建文件,在将内容追加到文件中, 就算文件发送完成。
相关推荐
原机小子20 分钟前
探索Vim的窗口艺术:窗口拆分功能全解析
linux·编辑器·vim
一颗星的征途6 小时前
宝塔-Linux模板常用命令-centos7
linux·运维·服务器
打打打劫6 小时前
Linux字符设备驱动
linux
cssl-虞老师6 小时前
Ubuntu安装Docker
linux·ubuntu·docker
Xu-小安安6 小时前
linux less命令详解
linux·less
huhy~7 小时前
PDI-kettle工具连接本地虚拟机Ubuntu上的数据库
linux·数据库·ubuntu
w_outlier7 小时前
gcc/g++的四步编译
linux·c++·gcc·g++
AllenLeungX7 小时前
Linux 安装 sftp
linux·运维·服务器
lendq7 小时前
k8s-第九节-命名空间
linux·容器·kubernetes
陪我养猪吧7 小时前
Linux 服务器环境搭建
linux·服务器·redis·mysql·nginx·jdk·maven