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基础(一)的更多相关文章

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

    本文主要是以代码为主..NET技术交流群 199281001 .欢迎加入. //通知一个或多个正在等待的线程已发生事件. ManualResetEvent manager = new ManualRe ...

  2. php Socket基础

    ◆ Socket 基础PHP使用Berkley的socket库来创建它的连接.socket只不过是一个数据结构.你使用这个socket数据结构去开始一个客户端和服务器之间的会话.这个服务器是一直在监听 ...

  3. 【转】Windows socket基础

    转自:http://blog.csdn.net/ithzhang/article/details/8448655 Windows socket 基础 Windows socket是一套在Windows ...

  4. 从零开始的Python学习Episode 21——socket基础

    socket基础 网络通信要素: A:IP地址   (1) 用来标识网络上一台独立的主机 (2) IP地址 = 网络地址 + 主机地址(网络号:用于识别主机所在的网络/网段.主机号:用于识别该网络中的 ...

  5. Python学习 :socket基础

    socket基础 什么是socket? - socket为接口通道,内部封装了IP地址.端口.协议等信息:我们可以看作是以前的通过电话机拨号上网的年代,socket即为电话线 socket通信流程 我 ...

  6. Python socket 基础(Server) - Foundations of Python Socket

    Python socket 基础 Server - Foundations of Python Socket 通过 python socket 模块建立一个提供 TCP 链接服务的 server 可分 ...

  7. Python socket 基础(Client) - Foundations of Python Socket

    Python socket 基础- Foundations of Python Socket 建立socket - establish socket import socket s = socket. ...

  8. Java IO学习笔记四:Socket基础

    作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...

  9. Python之路,Day8 - Python基础 面向对象高级进阶与socket基础

    类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的 ...

  10. iso socket基础2

    iPhone socket 编程之BSD Socket篇 收藏在进行iPhone网络通讯程序的开发中,不可避免的要利用Socket套接字.iPhone提供了Socket网络编程的接口CFSocket, ...

随机推荐

  1. Spring AOP 本质(4)

    这一主要看看Spring AOP是如何实现通知包围的.   Spring AOP包围通知在功能上和前置通知加后置通知类似,但还是有区别的:包围通知可以修改返回值,还可以阻止.替换目标方法的执行.   ...

  2. Pawn Brotherhood

    Pawn Brotherhood 1 alpha_table = "abcdefgh" 2 3 def safe_pawns(pawns): 4 safe_count = 0 5 ...

  3. ssh添加公钥

    ssh-keygen生成公钥存储在文件: ~/.ssh/id_rsa.pub 如果ssh-add -l命令后没有一串长的字符串, 把私钥密钥对的ID(fingerPrint)加入ssh的认证代理ssh ...

  4. HashMap Java Doc

    原文 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneab ...

  5. 【转】使用vnc连接linux服务器方便hadoop开发调试

    VNC(Virtual Network Computing)它能将完整的窗口界面通过网络,传输到另一台计算机的屏幕上. 类似的软件在Windows服务器中包含的"Terminal Serve ...

  6. poj 3662 Telephone Lines(好题!!!二分搜索+dijkstra)

    Description Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone compa ...

  7. MyWidget【简单自制控件】

    #coding=gbk from PyQt4 import QtGui,QtCore import random class MyWidget(QtGui.QWidget): def __init__ ...

  8. iOS 按住Home键的代理

    1.按住home键怎么保存程序的运行状态: 监听按home键的时候程序挂起的状态(通知),然后让其重新进入程序[[NSNotificationCenter defaultCenter] addObse ...

  9. hiberbate的工作原理

    hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...

  10. C++11里面的Lambda表达式

    Lambda Expressions in C++ C++中的Lambda表达式 In Visual C++, a lambda expression—referred to as a lambda— ...