首页 > 代码库 > Socket 基础
Socket 基础
OSI七层模型:
物理层:比特,数据链路层:帧,网络层:包,传输层及以上:报文。因为不用,不做详解。
TCP/IP模型:这个常用,详解。
- 链路层:负责在两个相邻节点上线路上的无差错传输数据,以帧为单位。每一帧数据包括一定数量的数据和一些必要的控制信息。其中接收方如果发现所传的数据有差错,则通知发送方重新发送。
附注:帧是一种数据结构,它有帧头、帧尾,在帧头中有地址信息、控制信息;在帧尾里有校验信息;帧中间是数据。
- 网络层:网络层的任务是选择合适的网间路由和交换节点以确保数据及时传送,因为网络中通信的两个计算机之间可能会经过很多个链路或者很多子网。网络层将数据链路层提供的帧组成数据包,包中封装有网络包头,其中包含逻辑地址信息(源站点和目的站点的网络地址IP)。网络层也称作IP层。
附注:数据包:一种数据结构,目的IP地址、源IP地址、净载数据
4位版本号 | 4位包头长度 | 8位服务类型 | 16位总长度 | |
16位标识即ID号 | 3位FLAG | 13位偏移 | ||
8为生存时间 | 8位协议类型 | 16位包头校验和 | ||
32位置源IP地址 | ||||
32位目的地址 | ||||
选项 | ||||
数据 |
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、Protocol=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数据包中未使用选项部分。当需要记录路由时才使用该选项。
- 传输层:根据通信子网的特性来最佳利用使用网络资源,并以经济可靠的方式为两个端系统的会话层之间提供建立维护和取消传输连接的功能。
16位源端口号 | 16位目的端口号 | |||||||
32位序列号 | ||||||||
32位确认序列号 | ||||||||
4位数据偏移 | 6位保留 | URG | ACK | PSH | RST | SYN | FIN | 16位窗口大小 |
16位校验和 | 16位紧急指针 | |||||||
选项 | ||||||||
数据 |
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个标志位的含义分别是:
0URG,紧急数据标志,为1表示有紧急数据,应立即进行传递。
0ACK,确认标志位,为1表示此数据包为应答数据包
0PSH,PUSH标志位,为1表示此数据包应立即进行传递。
0RST:复位标志位。如果收到不属于本机的数据包,则返回一个RST
0SYN:连接请求标志位。为1表示为发起连接的请求数据包。0FIN:结束连接请求标志位。为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个字节。
- 应用层:负责处理实际的应用程序细节。
TCP/IP基本概念补充:
- IP地址:对连接在网络中的设备的唯一编码。IPv4中,IP地址为32位,IPv6为128位。一个简单的IP地址等于网络地址加上主机地址。IP地址分为五类:
A类 | 0 | **** | ×××××× | ×××××× | ×××××× |
B类 | 10 | **** | **** | ×××××× | ×××××× |
C类 | 110 | **** | **** | **** | ×××××× |
D类 | 1110 | ×××××× | ×××××× | ×××××× | ×××××× |
E类 | 1111 | ×××××× | ×××××× | ×××××× | ×××××× |
其中:××××××表示主机地址,****表示网络地址。前面数字则是表示高位值,如A类,则最高位必须是0。B类最高两位必须是10。D类地址只能作为目标地址,不能作为源地址。E类为保留地址。
特殊地址:
网络地址:主机地址为0的表示网络地址,不分配给主机。
广播地址:主机地址全为1表示广播地址,用于向网络中所有主机法播消息。
回送地址:127开头的,如127.0.0.1表示回送本机。
- 子网和掩码:
很多时候采用C类地址时,发现地址空间不够,采用A类或者B类则又出现地址空间浪费。这种情况下的解决方案是:IP地址=网络地址+子网地址+主机地址。把每个网络的主机地址空间进一步划分成若干个子网。则原来两级地址结构中的地址又分为子网地址和主机地址。子网地址的位数根据子网的实际规模来确定。具体三级结构地址的确定需要根据子网掩码来确定。子网掩码是一个32位的地址,对应于网络地址和子网地址的地址掩码都设置为1而对应于主机地址的地址掩码设置为0。子网掩码用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP是在局域网还是在远程网上面。
如:网络号202.195.a.b。 子网个数16个,子网地址:11110000。则最终子网掩码:11111111.11111111.11110000.0000,即255.255.240.0。其中子网地址是靠规模来子网规模来决定的,因为需要十六个子网,所以此处子网地址采用11110000,其中后四位的0仍然用于主机地址的定义。子网掩码则是通过网络地址加上子网地址决定。
- 端口号:按照TCP/IP模型的描述应用层所有进程都通过传输层再到达IP层。传输层从IP层获取数据之后必须交付指定的进程。因此必须给应用层每一个不同的进程赋予一个标志位。由于计算机操作系统繁多,因为进程标识号无法胜任该职责。所以此处引入端口的概念。端口是一个抽象的软件结构。Tcp/IP模型使用一个16位的整数标识一个端口。其中注意的是TCP与UDP为两个相互独立的软件模块,因为两者之间的端口号不会冲突。
附注:保留端口号:0~1023,注册端口号:1024~49151,客户端口号:49152~65535
- 地址解析:IP->MAC。三种方式:表查询、相形计算(物理地址=协议地址&&0XFF)、信息交换(适用于LAN,基于分布式处理方式。)
附注:ARP:请求与响应。广播包含IP的信息,相应机器回送包含物理地址的响应。存表,以后对照。
- 域名系统:http://www.****.com/。域名系统称为DNS。此处解决方案为:树形递归。
- 数据封装与解封装:
Socket 基础