1、tcp如何保证传输的可靠性
合理分片:将数据分割成最适合tcp发送的数据块
超时重传:tcp发送端发送数据后会启动一个计时器,当计时器超过某个时间没有收到接收端的确认就,重新发送数据。
确认:tcp接收端接收到数据后发送确认给发送端。
校验:tcp接收到数据检验发现数据有误,丢弃报文段,不给出相应,发送端会超时重传
失序重排:tcp是用ip数据报传送数据的,ip数据报到达会失序,因此数据到达也会失序。Tcp会对失序的数据重新排列。
重复丢弃:对收到的重复数据丢弃掉。
流量控制:当接收端来不及处理发送端发送的数据,能提示发送端降低发送的速率,防止包丢失。
拥塞控制:当网络拥塞时,减少数据的发送。
2、Socket 编程
- 使用Socket 对象进行通信、客户端实例化一个Socket对象(指定服务器名称和端口号请求连接)、服务器端实例化一个ServerSocket 对象(使用accept()方法连接客户端给定的端口)
套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。
当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。
java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。
以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:
服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。
服务器调用 ServerSocket 类的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。
服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。
Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。
在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。
连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。
TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送.以下是一些类提供的一套完整的有用的方法来实现 socket。
网友评论