Linux之网络基础与SOCKET概述

一、网络基础

1. OSI七层模型

在这里插入图片描述

2. 应用进程之间的通信

  • 两个主机进行通信实际上就是两个主机中的应用进程互相通信;
  • 应用进程之间的通信又称为端到端的通信。

3. 传输层中两种不同的协议

  • 传输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
  • 当传输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道
  • 当传输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道

3.1 UDP协议

用户数据报协议(User Datagram Protocol, UDP),是一种无连接方式的、不可靠的运输协议。UDP的主要特点:

  • 不需要连接建立和释放;
  • 不支持流量控制、拥塞控制;
  • 传输过程中可能会丢失,可能会失序,可能会延迟等;
  • 支持广播和组播。
  • UDP实际上是在IP层上附加了简单的多路复用功能,提供端到端的统一用户接口的数据传输服务。
  • 高效(用户承担可靠性)、实时应用。

3.2 TCP协议

传输控制协议(Transmission Control Protocol,TCP),在提供无连接尽力递交服务的IP层上向高层提供面向连接的、端到端的、可靠字节流服务。TCP主要特点:

  • TCP是面向连接的网络层协议。
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。
  • TCP提供可靠交付的服务。
  • TCP提供全双工通信。
  • 面向字节流。

4. TCP的连接

  • TCP 把连接作为最基本的抽象。
  • 每一条 TCP 连接有两个端点。
  • TCP 连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。 TCP 连接的端点叫做套接字(socket)或插口。
  • 端口号拼接到(contatenated with) IP 地址即构成了套接字

4.1 客户服务器方式

  • TCP 连接的建立都是采用客户服务器方式。
  • 主动发起连接建立的应用进程叫做客户(client)。
  • 被动等待连接建立的应用进程叫做服务器(server)。

4.2 用三次握手建立 TCP 连接

在这里插入图片描述

第一次握手

客户A 的 TCP 向服务器 B 发出连接请求报文段,首部中的同步位 SYN = 1表示连接请求,并选择序号 seq = x,表明传送数据时的第一个数据字节的序号是 x,这个序号在网络通讯中用作临时的地址,每发一个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,另外,规定SYN位和FIN位也要占一个序号

第二次握手
  • 服务器B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
  • 服务器B 在确认报文段中应使 ACK = 1表示确认,其确认号ack = x + 1,表示“我接收到序号x及其以前所有的段,请你下次发送序号为x+1的段”,也就是应答了客户端的连接请求,同时也给客户端发出一个连接请求使 SYN = 1,自己选择的序号 seq = y
第三次握手
  • 客户A 收到此报文段后向 服务器B 给出确认, 其 ACK = 1,确认号 ack = y + 1。
  • 客户A 的 TCP 通知上层应用进程, 连接已经建立。
  • 服务器B 的 TCP 收到客户A 的确认后, 也通知其上层应用进程: TCP 连接已经建立。

二、SOCKET(插口)

TCP 使用“连接”作为最基本的抽象, 同时将 TCP 连接的端点称为插口(socket), 或套接字、 套接口。插口和端口、 IP 地址的关系是:
在这里插入图片描述

面向连接的客户/服务器时序图

在这里插入图片描述

逻辑过程

  • socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1;
  • bind()将socket()返回的网络通讯文件描述符sockfd与网络地址及端口号绑定;
  • listen()声明sockfd处于监听状态,监听客户端的连接。
  • 第一次握手请求连接后,服务器调用accept()接受连接(如果服务器调用accept()时还没有客户端的连接请求,就阻塞等待直到有客户端连接上来),第二次握手确认连接,accept()创建新的套接字,返回新的通讯文件描述符confd用于通信。
  • send()请求服务器服务,第三次握手同时发送数据。
  • recv()服务器接收数据,处理客户机的服务请求。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值