socket

关于网络通讯TCP/IP的一些基础知识

  1. TCP/IP协议族主要协议有IP协议(互联网协议,InternetProtocol),TCP协议(传输控制协议,TransmissionControlProtocol)和UDP协议(用户数据报协议,UserDatagramProtocol)
  2. IP协议只是一个“尽力而为“(best-effort)的协议:它试图分发每一个分组报文,但在网络传输过程中,偶尔也会发生丢失报文,使报文顺序被打乱或重复发送报文的情况。
  3. IP协议层之上称为传输层(transport layer)。它提供了两种可选择的协议:TCP协议和UDP协议
  4. 这两种协议都建立在IP层所提供的服务基础上,但根据应用程序协议(application protocols)的不同需求
  5. 它们使用了不同的方法来实现不同方式的传输。TCP协议和UDP协议有一个共同的功能“寻址”。IP协议只是将分组报文分发到了不同的主机,还需要更细粒度的寻址将报文发送到主机中指定的应用程序,因为同一主机可能有多个应用程序在使用网络。TCP协议和UDP协议使用的地址叫做端口号(port numbers),都是用来区分同一主机中的不同应用程序。TCP协议和UDP协议也称为端到端传输协议(end-to-end transport protocols),因为他们将数据从一个应用程序传输到另一个应用程序,而IP协议只是将数据从一个主机传输到另一个主机。
  6. TCP协议能检测和恢复IP层提供的主机到主机的信道中可能发生的报文丢失、重复及其他错误。TCP协议提供了一个可信赖的字节流(reliable byte-stream)信道,这样应用程序就不需要在处理上述的问题。TCP协议是一种面向连接(connection-oriented)的协议:在通信之前两个程序首先要建立一个TCP连接,这涉及到相互通信的两台电脑的TCP部件间完成的握手信息(handshake messages)的交换。使用TCP协议在很多方面都与文件的输入输出(I/O,Input/Output)相似。另一方面UDP协议不会IP层产生的错误进行修复,它仅仅只是简单的扩展了IP协议的数据报服务。

信息编码

1.基本整型

TCP和UDP套接字是我们能发送和接收字节列(数组),即范围在0-255之间的整数。使用这个功能,我们可以对值更大的基本整型数据进行编码,不过发送者和接收者必须先在一些方面达成共识。

一:是要传输的每个整数的字节大小(size),如:int数据类型由32位表示,因此我们可以使用4个字节来传输任意的int类型变量或常量。

二:对于超过一个字节来表示的数据类型,我们必须知道这些字节的发送顺序。有两种选择:从整数的右边开始,

由低位到高位地发送,即little-endian顺序;或者从左边开始,由高位到低位,即big-endian顺序。

(java是大端即big-endian,c是小端即little-endian,所以若是java和c端使用socket通信注意大小端的转换)

三:所传输的数值是有符号的(signed)还是无符号的(unsigned)。Java中的四种基本数据类型都是有符号的,它们的值以二进制补码(two’s-complement)的方式存储。

2.反码和补码