TCP/IP

包”(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。在局域网中,“包”是包含在“帧”里的。我们可以用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。 数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成。 数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。 正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。理解数据包,对于网络管理的网络安全具有至关重要的意义。
数据报是一个比较抽象的内容,常是对数据报结构进行分析,常见的有TCP/IP各层协议中的数据报,IP数据报中依次包括以下信息:
1、Version=4,表示IP协议的版本号为4。该部分占4个BIT位。
2、Header Length=20 Bytes,表示IP包头的总长度为20个字节。该部分占4个BIT位,单位为4个字节,因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。
3、Type of Service=00,表示服务类型为0。该部分用二个十六进制值来表示,共占8个BIT。
8个BIT的含义是:
000 前三位不用
0 表示最小时延,如Telnet服务使用该位
0 表示吞吐量,如FTP服务使用该位
0 表示可靠性,如SNMP服务使用该位
0 表示最小代价
0 不用
4、Total Length=48Bytes,表示该IP包的总长度为48个字节。该部分占16个BIT,单位为Byte。由此可见,一个IP数据包的最大长度为2的16次方减1,即:65535个字节。因此,在以太网中能够传输的最大IP数据包为65535个字节。
5、Identification=363,表示IP包识别号为363。该部分占16个BIT,以十进制数表示。
6、Flags,表示片标志,占3个BIT。各位含义分别为:第一个“0”不用,第二个“0”为分片标志位,“1”表示分片,“0”表示不分版本。第三个0为是否最后一片标志位,0表示最后一片,1表示还有更多的片。
7、Fragment Offset=0,表示片偏移为0个Bytes。该部分占13个BIT。
8、Time to Live=128Secongs/Hops,表示生存时间TTL值为128。该部分占8个BIT。
9、Proctol=6(TCP),表示协议类型为TCP,协议代码是6。如果是UDP协议,则此处的协议代码应为17。如果是ICMP协议,则此处的协议代码应为1。该部分占8个BIT。
10、Header Checksun=4035(correct),表示IP包头校验和为4035,括号内的Correct表示此IP数据包是正确的,没有被非法修改过。该部分占16个BIT,用十六进制表示。
11、Source Address=[76.88.16.104],表示IP数据包源地址为:76.88.16.104。该部分占32个BIT。
12、Destination Address=[76.88.16.16],表示IP数据包目的地址为:76.88.16.16。该部分占32个BIT。
13、No Options,表示IP数据包中未使用选项部分。当需要记录路由时才使用该选项。
TCP数据报中依次包括以下信息:
1、Source Port=1038,表示发起连接的源端口为1038。该部分占16个BIT。通过此值,可以看出发起连接的计算机源端口号。
2、Destination Port=21(FTP-CTRL),表示要连接的目的端口为21。该部分占16个BIT。通过此值,可以看出要登录的目的端口号。21端口表示是FTP服务端口。
3、Initial Sequence Number=1791872318,表示初始连接的请求号,即SEQ值。该部分占32个BIT,值从1到2的32次方减1。
4、Next Expected SEQ Number=1791872319,表示对方的应答号应为1791872319,即对方返回的ACK值。该部分占32个BIT,值从1到2的32次方减1。
5、Data Offset=28 Bytes,表示数据偏移的大小。该部分占4个BIT。
6、Reserved Bites:保留位,此处不用。该部分占6个BIT。
7、Flags=02。该值用两个十六进制数来表示。该部分长度为6个BIT,6个标志位的含义分别是:
0 URG,紧急数据标志,为1表示有紧急数据,应立即进行传递。
0 ACK,确认标志位,为1表示此数据包为应答数据包
0 PSH,PUSH标志位,为1表示此数据包应立即进行传递。
0 RST:复位标志位。如果收到不属于本机的数据包,则返回一个RST
0 SYN:连接请求标志位。为1表示为发起连接的请求数据包。
0 FIN:结束连接请求标志位。为1表示是结束连接的请求数据包。
8、Window=64240,表示窗口是64240。该部分占16个BIT。
9、CheckSum=92D7(Correct),表示校验和是92D7。该部分占16个BIT,用十六进制表示。
10、Urgent Pointer=0,表示紧急指针为0。该部分占16个BIT。
11、Maximum Segment Size=1460,表示最大段大小为1460个字节。

 

datagram(数据报) -- 在网络层中的传输单元(例如IP)。一个datagram可能被压缩成一个或几个packets,在数据链路层中传输。

packet(数据包) -- 封装的基本单元,它穿越网络层和数据链路层的分解面。通常一个packet映射成一个frame,但也有例外:即当数据链路层执行拆分或将几个packet合成一个frame的时候。

二层的PDU叫做Frame;
IP的叫做Packet;
TCP的叫做Segment;
UDP的叫做Datagram。

OSI参考模型的各层传输的数据和控制信息具有多种格式,常用的信息格式包括帧、数据包、数据报、段、消息、元素和数据单元。信息交换发生在对等OSI层之间,在源端机中每一层把控制信息附加到数据中,而目的机器的每一层则对接收到的信息进行分析,并从数据中移去控制信息,下面是各信息单元的说明:
   帧(frame)是一种信息单位,它的起始点和目的点都是数据链路层。
   数据包(packet)也是一种信息单位,它的起始和目的地是网络层。
   数据报(datagram)通常是指起始点和目的地都使用无连接网络服务的的网络层的信息单元。
   段(segment)通常是指起始点和目的地都是传输层的信息单元。
   消息(message)是指起始点和目的地都在网络层以上(经常在应用层)的信息单元。
   元素(cell)是一种固定长度的信息,它的起始点和目的地都是数据链路层。元素通常用于异步传输模式(ATM)和交换多兆位数据服务(SMDS)网络等交换环境。
   数据单元(data unit)指许多信息单元。常用的数据单元有服务数据单元(SDU)、协议数据单元(PDU)。SDU是在同一机器上的两层之间传送信息。PDU是发送机器上每层的信息发送到接收机器上的相应层(同等层间交流用的)。


 

流式套接字(TCP)和 数据报套接字(UDP)的区别

流式套接字要分客户和服务器,而数据报不用分
流式套接字适合传输数据量大的,而数据报套接字适合传递数据量少的
流式套接字建立麻烦,数据报套接字建立简单
客户的流式套接字只能向一个方向传递,数据报套接字可以接受任何方向的来得数据,并可以向任何地址发送数据报

流套接字比数据报套接字好,这样你可以不必管理底层细节,只需要相信TCP就可以保证传送的数据是依次,可靠的传送的,缺点是效率相对数据报套接字低。
使用数据报套接字,可以让你更快,但你得自已保证数据是否依次,准确的传送来的,
如使用数据报套接字,你可能先收到后发的,后收到先发的,还有可能收漏,

数据报套接字是用来发送数据报的,是面向无连接不可靠的传输(在今天这个网络里,其实已经相当可靠)

流套接字是面向连接可靠的传输。服务器通过转发实现一个客户与另一个客户的数据传送。当向另一个客户转发时,他必须知道对方IP(或套接字等),所以要求转发的客户必须提供关于接受方的信息,否则服务器不知道向哪转发。

 

 

注意:

1,TCP/IP通讯是不可能丢包的。
2,TCP/IP通讯是绝对的先发先到的。顺序不可能错乱。
3,多线程向Socket 中发数据时,发送操作要加锁的。Java中加synchronized。否则肯定会出乱子。

4,TCP 粘包  TCP 是流式的 ,无消息边界。 所以有可能 2 个包(或多个包) 合并成一个包。

5,多个并发线程可安全地使用套接字通道。尽管在任意给定时刻最多只能有一个线程进行读取和写入操作,但数据报通道支持并发的读写 

 

详细资料:/Files/kkcheng/Java中TCP_IP及Socket编程.doc

 

 

 

你可能感兴趣的:(TCP/IP)