Socket
这不是一个协议,而是一个通信模型。主要用来一台电脑的两个进程间的通信(进程间通信)Socket其实就是I/O(输入输出)操作(A发给B,B收到)
是在应用层和传输层之间的一个抽象层 把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用,实现进程在网络中的通讯。
- 网络OSI模式 7层 每层作用
一、物理层:该层包括物理联网媒介,如电缆连线连接器
数据还没有被组织,是01单位是比特。(传输)(比特)
二、数据链路层:控制网络层与物理层之间的通信(纠错)(数据帧)
三、网络层:(路由器找到某台计算机)(数据包)
四、传输层:(数据太大分包传输)(数据包)
五、会话层:(建立管理和程序之间的通信)(报文)
六、表示层:(解决不同系统之间的通信语法问题)
七:应用层:为操作系统或网络应用程序提供访问网络服务的接口
- TCP IP模型,4层内容
一、网络接口层:
二、网络互连层:网络互连层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。
网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互连层还需要完成拥塞控制的功能。
三传输层: 在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmission control protocol)和用户数据报协议UDP(user datagram protocol)。
四、应用层:TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。
应用层面向不同的网络应用引入了不同的应用层协议。其中,有基于TCP协议的,如文件传输协议(File Transfer Protocol,FTP)、虚拟终端协议(TELNET)、超文本链接协议(Hyper Text Transfer Protocol,HTTP),也有基于UDP协议的。
-
网络通讯要素 IP 端口 传输协议概念
-
TCP UDP区别
TCP是流协议,而UDP是数据报协议
TCP(传输控制协议)
1.建立连接,形成传输数据的通道
2、TCP提供超时重发
3、用于传输大量数据(流模式)
UDP(用户数据报协议)
1、面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去
2、UDP适用于一次只传送少量数据(数据包)、对可靠性要求不高的应用环境
3、没有超时重发等机制,故而传输速度很快
|名称|安全性|传输速率|传输数据大小|是否面向连接
|:---|:---|:---|
|TCP|高|慢|无限制|面向连接
|UDP|低|快|64k|面向非连接
- 网络进程如何通讯,如何标识唯一网络进程
网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)
。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,
网络中的进程通信就可以利用这个标志与其它进程进行交互
(在本地可以通过进程PID来唯一标识一个进程)。
- socket基本操作(表) 函数
8.
socket使用socket使用的库函数
1.创建套接字
Socket(af,type,protocol)//建立地址和套接字的联系
bind(sockid, local addr, addrlen)//服务器端侦听客户端的请求
listen( Sockid ,quenlen)//建立服务器/客户端的连接 (面向连接TCP)
2.客户端请求连接
Connect(sockid, destaddr, addrlen)//服务器端等待从编号为Sockid的Socket上接收客户连接请求
newsockid=accept(Sockid,Clientaddr, paddrlen)//发送/接收数据
3.面向连接:
send(sockid, buff, bufflen)
recv()
4.面向无连接:
sendto(sockid,buff,…,addrlen)
recvfrom()
5.释放套接字
close(socked)
NSStream:数据流的父类,用于定义抽象特性,例如:打开、关闭代理,NSStream继承自CFStream(CoreFoundation)
NSInputStream:NSStream的子类,用于读取输入
NSOutputStream:NSSTream的子类,用于写输出。
三次握手连接过程
(在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize SequenceNumbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。)
三次握手.png
- 四次释放过程
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
-
NSStream流
代码 -
Socket与HTTP连接不同
HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于TCP连接的
tcp协议: 对应于传输层
ip协议: 对应于网络层
TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。
Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,才能使用TCP/IP协议。
通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际应用中,客户端到服务器之间的通信防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,
因此需要通过轮询告诉网络,该连接处于活跃状态。
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
网友评论