IOS开发之Socket
-
同一时刻一个端口只能建立一个链接,但是一个端口可以监听多个请求。(当发送一个请求时,服务器会生成一个队列来保存这些个请求)
-
数据传递: 应用层把数据给传输层,有时候传输的数据比较大,传输层不会立即把数据丢出去,在这个过程中,传输层会有一个缓冲区,存放数据。有时候因为网络的原因,数据不能及时的发出去,然后就会数据累计,会造成粘包现象避免这种情况,我们需要自定义数据格式
-
为什么是三次握手?
- 为了确定链接,避免建立无用的TCP拍链接,浪费系统资源。加入是两次链接。首先你发送一天报文,但是由于网络,堵塞在网路中,这个时候你没有收到服务器的返回, 你在次发送一天链接信息,服务器返回给你数据,然后此时,堵塞在我网络中的报文信息,到达服务器,这时候服务器会认为还需要传输数据,会再次创建一个链接通道,但是实质此时是没有必要再建立链接通道的,所有三次握手,是在此进行确认需要链接,防止这种情况发生。
- 为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
- 由于网络传输是有延时的(要通过网络光纤和各种中间代理服务器),在传输的过程中,比如客户端发起了SYN=1创建连接的请求(第一次握手)。
如果服务器端就直接创建了这个连接并返回包含SYN、ACK和Seq等内容的数据包给客户端,这个数据包因为网络传输的原因丢失了,丢失之后客户端就一直没有接收到服务器返回的数据包。
客户端可能设置了一个超时时间,时间到了就关闭了连接创建的请求。再重新发出创建连接的请求,而服务器端是不知道的,如果没有第三次握手告诉服务器端客户端收的到服务器端传输的数据的话,
服务器端是不知道客户端有没有接收到服务器端返回的信息的。
-
TCP的四次挥手(Four-Way Wavehand)
- 1.首先客户端想要释放连接,向服务器端发送一段TCP报文
- 2.服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接请求。
- 3.服务器端做好了释放服务器端到客户端方向上的连接准备,再次向客户端发出一段TCP报文
- 4.客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,、并向服务器端发送一段报文, 服务器收到报文之后,结束并释放链接