注释
Socket网络的初步学习
1、什么是Socket?
Socket套接字是应用层(用户进程)与运输层(tcp和udp)之间的软件抽象层,可以用来实现不同计算机之间的通信。具有实时性、
长连接的特点,在设计模式中相当于门面模式。
2、Socket的使用流程?
见图
3、什么是Tcp/Udp?
就是一个运输层传输协议
4、Tcp和Udp的区别?
1、Tcp是面向连接的协议,也就是在发送数据前,必须和对方建立可靠的连接。
一个Tcp的链接必须经过三次握手才能连接,四次挥手关闭连接。
2、Udp是一个非连接的协议,传输数据之前双方不建立连接。当它想传送时就简单的抓取来自
应用程序的数据,并尽可能快的把它扔到网络上。
3、Tcp保证数据的正确性,Udp可能丢包。
4、Tcp保证数据的传输顺序,UdP不保证。
5、Tcp的三次握手和四次挥手?
三次握手:
客户端向服务器发送连接请求。
服务器收到消息响应,向客户端进行确认。
客户端在向服务器表示确认。
这个过程是在客户端的connect()和服务器的Accept()函数中的。
四次挥手:
客户端发送中断请求。
服务器得到消息,继续处理未处理完的资源。
服务器处理完毕通知客户端可以断开。
客户端收到确认信息,表示断开。
6、Tcp粘包分包问题的出现?如何解决?
粘包:
所谓粘包就是通讯的一端一次性连续发送多条数据包,tcp协议会将多个数据包打包成一个报文发
送出去。
产生原因:
1、要发送的数据小于Tcp发送缓冲区的大小。
2、数据发送过快,导致数据包堆积多个数据后才一次性发送。
解决方法:
1、客户端在发送数据包的时候采用包头+包体的方式,包头表示上包体的长度,服务器接收后
根据长度来解析包体。
2、将每个数据包封装成固定的长度,不够的用0填充。
3、可以在数据包中设置特殊符号,接收端通过特殊符号来拆分
拆包:
就是通讯的一端发送的数据包超过tcp报文所能传输的最大值,就会将一个数据包拆分成多个数据
包分开传输。
产生原因:
1、传输数据大于tcp传输最大值
解决方法:
1、也是传输数据包的时候加上数据的长度,,服务端接收到数据后,先读取四个字节的int
值,然后再读取对应长度的字节数。