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。此处解决方案为:树形递归。
  • 数据封装与解封装:

时间: 2024-10-16 08:39:50

Socket 基础的相关文章

Unix网络编程 之 socket基础

基本结构 (这部分的地址均为网络地址<网络字节序>) 1.struct sockaddr:通用套接字地址结构 此结构用于存储通用套接字地址. 数据结构定义: typedef unsigned short sa_family_t; struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ };    sa_fa

Android网络编程(一)---Socket基础

Socket通常称为""套接字.Socket字面上的中文意思为"插座".一台服务器可能会提供很多服务,每种服务对应一个Socket,而客户的"插头"也是一个Socket.Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议.Socket用于描述IP地址和端口,是一个通信链的句柄.应

socket基础

socket基础 SocketServer socket基础 写个自己的一句话,记得在封装传递的时候用上getattr等 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket

Socket基础3

<以下摘自http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html> 网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应用程序(进程).这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互. Unix/Linux基本哲学之一就是"一切皆文件",都可以用"打开

【转】Windows socket基础

转自:http://blog.csdn.net/ithzhang/article/details/8448655 Windows socket 基础 Windows socket是一套在Windows操作系统下的网络编程接口.它不是一种网络协议,而是一个开放的.支持多个协议的Windows下的网络编程接口 . Windows socket是以Unix socket为基础,因此Windows socket中的许多函数名与Unix都是一样的.除此之外它还允许开发人员充分利用Windows的消息驱动机

php socket 基础知识

◆ Socket 基础PHP使用Berkley的 socket库来创建它的连接.socket只不过是一个数据结构.你使用这个socket数据结构去开始一个客户端和服务器之间的会话.这个服务器是一 直在监听准备产生一个新的会话.当一个客户端连接服务器,它就打开服务器正在进行监听的一个端口进行会话.这时,服务器端接受客户端的连接请求,那么就进 行一次循环.现在这个客户端就能够发送信息到服务器,服务器也能发送信息给客户端.产生一个Socket,你需要三个变量:一个协议.一个socket类型和一个公共协

C# Socket基础(四)之客户端向服务器发消息

private Socket socketClient;//客户端套接字,关于实例化请参考C# Socket基础(三)之客户端连接服务器和接收消息 客户端发送消息 1 /// <summary> 2 /// 发送数据到服务端 3 /// </summary> 4 private void Send() 5 { 6 if (socketClient == null) 7 { 8 9 ShowMsg("服务器未启动!"); 10 return; 11 } 12 by

C# Socket基础(一)之启动异步服务监听

本文主要是以代码为主..NET技术交流群 199281001 .欢迎加入. //通知一个或多个正在等待的线程已发生事件. ManualResetEvent manager = new ManualResetEvent(false); 1 //负责监听的套接字 private Socket socketServer; 2 /// <summary> 3 /// 启动服务 4 /// </summary> 5 private void CreateSocketService() 6 {

C# Socket基础(二) 之 服务器异步接收消息

ManualResetEvent reviceManager = new ManualResetEvent(false); 1 public void args_Completed(object sender, SocketAsyncEventArgs e) 2 { 3 //监听完成客户端的请求,一但监听到返回新的套接字 4 var clientSocket = e.AcceptSocket; 5 //启动线程获取客户端发来的消息 6 if (clientSocket == null) retu

Socket基础之-启动异步服务侦听

本文主要是以代码为主..NET技术交流群 199281001 .欢迎加入. //通知一个或多个正在等待的线程已发生事件. ManualResetEvent manager = new ManualResetEvent(false); 1 //负责监听的套接字 private Socket socketServer; 2 /// <summary> 3 /// 启动服务 4 /// </summary> 5 private void CreateSocketService() 6 {