Socket网络连接详解

一. 网络OSI模式(7层)

  • 网络模型:OSI(开放系统互联Open System Interconnnection)TCP/IP参考模型
  • 网络通讯要素:

1.IP地址(唯一标识网络设备)

  • 网络中设备的标示
  • 不易记忆,可以用主机名
  • 本地回环地址:127.0.0.1 主机名:localhost

2.端口号(定位程序标示进程的逻辑地址,不同进程的标示)

  • 有效端口:065535,其中01024由系统使用或者保留端口,开发中不要 使用1024以下的端口

3.传输协议(用什么样的模式交互)

  • 通讯的规则,常见协议:TCP、UDP
  • URL(统一资源定位) http://ip:80/文件路径

二. OSI七层以及作用

Socket网络连接详解_第1张图片
应用层七层

七层代表的是:物理层->数据链路层->网络层->传输层->会话层->表示层->应用层

(记法:
物理层是最基层的层次(物理层),
有了物理层我们想要发送数据(数据链路层),
要传输数据就要需要介质也就是网络(网络层),
有了介质后我们就可以传输数据给对方(传输层),
传输完成后就可以发给另一个用户对话(会话层),
有了对话后就需要显示出来(显示层),
显示出来后就可以进行使用了(应用层)
)
  • 七层之间的关系
  • 网络层各节点都有相同的层次
  • 不同节点相同层次具有相同的功能
  • 同一节点相邻层间通过接口通信
  • 每一层可以使用下层提供的服务,并向上层提供服务
  • 不同结点的同等层间通过协议来实现对等层间的通信

三. 七层内容和作用

  1. 物理层:主要定义物理设备标准,如网线的接口类型、各种传输介质的传输速率等。主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是常说的数模与模数转换)。这一层的数据叫做比特(bit),主要设备:集线器
  2. 数据链路层:主要将从物理层接收的数据进行MAC地址的封装与解封装。常把这一层的数据叫做帧,主要设备:网卡,交换机
  3. 网络层:选择合适的网间路由和交换结点, 确保数据及时传送,将从下层接收到的数据进行IP地址的封装与解封装。常把这一层数据叫做数据包,主要设备:路由器。
  4. 传输层:定义了一些传输数据的协议和端口,如TCP、UDP协议,主要将从下层接收的数据进行分段和传输,到达目的地址后再进行重组,以往把这一层数据叫做段。
  5. 会话层:通过传输层建立数据传输通路。在系统之间发起会话或者接受会话请求(设备之间需要互相认识)
  6. 表示层:主要是进行对接收的数据进行解释、压缩与解压缩等,即把计算机能够识别的东西转化成人能够识别的东西(如图片、声音等)
  7. 应用层:主要是一些终端的应用,比如说FTP(各种文件下载)、浏览器、QQ等,可以将其理解为在电脑屏幕上可以看到的东西,也就是终端应用。

四. TCP/IP参考模型(4层)

Socket网络连接详解_第2张图片
OSI和TCP/IP的不同
Socket网络连接详解_第3张图片
每层代表

五.TCP UDP的区别

首先,我们先了解一下各自分别代表的是什么协议
TCP:传输控制协议
UDP:用户数据报协议

两者的区别在于:
1.连接方式
TCP:需要建立连接,形成传输数据的通道
UDP:不需要建立连接,将数据源和目的封装成数据包中

2.数据传输的大小
TCP:数据大小不收限制,在连接中进行大数据传输
UDP:每个数据报的大小限制在64K之内

3.安全性
TCP:通过三次握手完成连接,因此是可靠协议,安全送达
UDP:因为无需连接,因此是不可靠协议

4.效率性
TCP:必须需要建立连接,所以效率稍微会低些
UDP:不需要建立连接,速度快

六.Scoket的解释(网络进程间如何进行通讯)

  • Socket就是为网络服务提供的一种机制

  • 通信的两端都是Socket

  • 网络通信其实就是Socket间的通信

  • 数据在两个Socket间通过IO传输

  • Socket抽象层是位于应用层和传输层之间的一层

  • 可以只传送数据本身而不用进行XML封装,大大降低数据传输的开销(JSON)

  • Socket允许使用长连接,允许应用程序运行在异步模式(提高效率),只有在需要的时候才接收数据

    • 常用的两种Socket类型
  • 流式Socket(SOCK_STREAM):流式是一种面向连接的Socket,针对于面向连接的TCP服务应用

    • 数据报式Socket(SOCK_DGRAM):数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用

七.如何唯一标识一个进程

  • 本地:通过进程间PID来唯一标识一个进程
  • 网络:TCP/IP协议中的网络层的“IP地址”来唯一标识网络中的主机。
    传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。
    利用三元组标识(ip地址,协议,端口)就可以标识网络的进程与其他进程的交互

八.socket的基本操作(套接字)

Socket网络连接详解_第4张图片
socket的基本操作
Socket网络连接详解_第5张图片
socket函数

九.socket中TCP- 三次握手建立连接

Socket网络连接详解_第6张图片
三次握手建立连接
  • 第一次握手:
    建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
  • 第二次握手:
    服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
  • 第三次握手:
    客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

十.socket中TCP- 四次握手释放连接详解

Socket网络连接详解_第7张图片
四次握手释放连接

图示过程如下:

1.某个应用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;
2.另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。
它的接收也作为文件结束符传递给应用进程,
因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据;
3.一段时间之后,接收到文件结束符的应用进程调用close关闭它的socket。
这导致它的TCP也发送一个FIN N;
4.接收到这个FIN的源发送端TCP对它进行确认。

十一.在iOS中流式Socket连接的方法

在iOS中以NSStream(流)来发送和接收数据,可以设置流的代理,对流状态的变化 做出响应

  • 连接建立
  • 接收到数据
  • 连接关闭

NSStream:数据流的父类,用于定义抽象特性,例如:打开、关闭代理,NSStream继承自CFStream(Core Foundation)
NSOutputStream:NSSTream的子类- 输出流:用来写数据
NSInputStream:NSStream的子类-输入流:用来读数据
A输出------输入->B A向B输入数,对A是输出,但对B是输入

十二.Socket连接与HTTP连接的不同

通常情况下Socket连接就是TCP连接
不同点:
1.连接长度

  • Socket:长连接,连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开
  • HTTP:短连接,连接使用的是“请求—响应”的方式

2.连接响应

  • Socket:实际情况中,客户端到服务器之间的通信防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态
  • HTTP:在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据(被动)

你可能感兴趣的:(Socket网络连接详解)