七层协议模型和四层协议模型
七层协议模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
四层协议模型:链路层、网络层、传输层、应用层
TCP通信流程
服务器端
(1)创建socket(socket)
(2)绑定自己的IP(bind)
(3)监听客户端连接(listen)
(4)接收客户端的连接(accept)
(5)接收客户端的信息(recv)
(6)发送消息给客户端(send)
(7)关闭套接字(close)
客户端
(1)创建socket(socket)
(2)连接服务器(connect)
(3)发送消息到服务器(send)
(4)接收服务端的信息(recv)
(5)关闭套接字(close)
什么是三次握手
第一次握手:客户端发送一个 SYN给服务器,客户端进入SYN_SEND 状态,然后等待服务器的回发确认信息;
第二次握手: 服务器发一个 SYN+ACK 给客户端,确认已经收到客户端发来的信息,此时服务器进入SYN_RECV状态;
第三次握手:客户端接收到服务器发来的确认信息后,再反馈一个 ACK给服务器,完成三次握手,客户端和服务器进入ESTABLISHED状态,到此一个TCP连接就完成了。
套接字的IO模式有哪几种
1.阻塞
2.非阻塞
3.多路复用
4.信号
5.异步
socket连接与http连接区别
1、主体不同:
socket:socket不属于协议范畴,而是一个调用接口(API),是对TCP/IP协议的封装。实现服务器与客户端之间的物理连接,并进行数据传输。
http:HTTP是基于TCP/IP协议的应用层协议,定义的是传输数据的内容的规范。
2、所处层次不同:
socket:Socket处于网络协议的传输层,主要有TCP/UDP两个协议(当然也有TCP/IP协议族中其他的协议)。
http:HTTP是基于TCP/IP协议的应用层协议。
3、连接状态不同:
socket:socket连接是长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会使连接断开,比如:服务器端或客户端主机宕机了、网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息。
http:HTTP是基于请求-响应形式并且是短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉。HTTP是无状态的协议,针对其无状态特性,在实际应用中又需要有状态的形式,因此一般会通过session/cookie技术来解决此问题。
4、传输数据量不同:
socket:socket传输的数据可自定义,为字节级,数据量小。
http:HTTP的传输速度慢,数据包大。
5、数据安全性不同:
socket:数据可以加密,数据安全性高,适合Client/Server之间信息实时交互。
http:数据传输安全性差,如实现实时交互,服务器性能压力大。
6、连接方式不同。
socket:Socket是客户端跟服务器直接使用Socket”套接字”进行连接,并没有规定连接后断开,所以客户端和服务器可保持连接通道,双方都可以主动发送数据。
http:http是客户端用http协议进行请求,发送请求的时候需要封装http请求头,并绑定请求的数据,服务器一般有web服务器配合(当然也非绝对),http的请求方式为客户端主动发起请求,服务器才能给响应,一次请求完毕后则断开连接,以节省资源,服务器不能主动给客户端发起响应,主要使用类是NSURLConnection。
tcp和udp的区别
TCP与UDP基本区别:
1.基于连接与无连接
2.TCP要求系统资源较多,UDP较少;
3.UDP程序结构较简单
4.流模式(TCP)与数据报模式(UDP);
5.TCP保证数据正确性,UDP可能丢包
6.TCP保证数据顺序,UDP不保证
UDP应用场景:
1.面向数据报方式
2.网络数据大多为短消息
3.拥有大量Client
4.对数据安全性无特殊要求
5.网络负担非常重,但对响应速度要求高
具体编程时的区别:
1.socket()的参数不同
2.UDP Server不需要调用listen和accept
3.UDP收发数据用sendto/recvfrom函数
4.TCP:地址信息在connect/accept时确定
5.UDP:在sendto/recvfrom函数中每次均 需指定地址信息
6.UDP:shutdown函数无效