TCP/IP 相关总结

Posted by Elton's Blog on October 23, 2012
# 1.   三次握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送**syn**包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的**SYN**(ack=j+1),同时自己也发送一个SYN包(syn=k),即**SYN+ACK**包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包**ACK**(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。  

2.   TCP/IP 四层

应用层:HTTP,FTP,DNS,TELNET 传输层:TCP,UDP 网络互连层:IP 网络接口层:以太网,wifi等   OSI 的七层模型
7 **应用层** 例如HTTPSMTPSNMPFTPTelnetSIPSSHNFSRTSPXMPPWhoisENRP
6 **表示层** 例如XDRASN.1SMBAFPNCP
5 **会话层** 例如ASAPTLSSSH、ISO 8327 / CCITT X.225、RPCNetBIOSASPWinsockBSD sockets
4 **传输层** 例如TCPUDPRTPSCTPSPXATPIL
3 **网络层** 例如IPICMPIGMPIPXBGPOSPFRIPIGRPEIGRPARPRARPX.25
2 **数据链路层** 例如以太网令牌环HDLC帧中继ISDNATMIEEE 802.11FDDIPPP
1 物理层 例如线路无线电光纤
 

3.  IP 地址分类

IP地址是四段八位的二进制数组成的,IP分为A,B,C,D,E五类地址 **A类**高端为0,从1.x.y.z--126.x.y.z;** ** **B类**高端为10,从128.x.y.z--191.x.y.z;** ** **C类**高端为110,从192.x.y.z--223.x.y.z;** ** **D类**高端为1110是保留的IP地址;** ** **E类**高端为1111,是科研用的IP地址 其中255是广播地址,127是内部回送函数  

4.  子网掩码等知识

IP ADDRESS:你的物理IP地址; SUBNET MASK:是"子网掩码"的意思 DEFAULT GATEWAY:默认网关; 什么是子网掩码 你一定对IP地址有所了解吧?我们知道在INTERNET中广泛使用的TCP/IP协议就是利用IP地址来区别不同的主机的。如果你曾经进行过TCP/IP协议设置,那么你一定会遇到子网掩码(Subnetmask)这一名词,那么你知道什么是子网掩码吗?它有什么作用呢? 我们知道IP地址是一个4字节(共32bit)的数字,被分为4段,每段8位,段与段之间用句点分隔。为了便于表达和识别,IP地址是以十进制形式表示的如210.52.207.2,每段所能表示的十进制数最大不超过255。IP地址由两部分组成,即网络号(NetgworkID)和主机号(HostID)。网络号标识的是Internet上的一个子网,而主机号标识的是子网中的某台主机。网际地址分解成两个域后,带来了一个重要的优点:IP数据包从网际上的一个网络到达另一个网络时,选择路径可以基于网络而不是主机。在大型的网际中,这一点优势特别明显,因为路由表中只存储网络信息而不是主机信息,这样可以大大简化路由表。IP地址根据网络号和主机号的数量而分为A、B、C三类: **A类IP地址:用7位(bit)来标识网络号,24位标识主机号,最前面一位为"0",即A类地址的第一段取值介于1~126之间**。A类地址通常为大型网络而提供,全世界总共只有126个只可能的A类网络,每个A类网络最多可以连接16777214台主机。 **B类IP地址:用14位来标识网络号,16位标识主机号,前面两位是"10"。B类地址的第一段取值介于128~191之间,第一段和第二段合在一起表示网络号。**B类地址适用于中等规模的网络,全世界大约有16000个B类网络,每个B类网络最多可以连接65534台主机。 **C类IP地址:用21位来标识网络号,8位标识主机号,前面三位是"110"。C类地址的第一段取值介于192~223之间,第一段、第二段、第三段合在一起表示网络号。**最后一段标识网络上的主机号。C类地址适用于校园网等小型网络,每个C类网络最多可以有254台主机。 从上面的介绍我们知道,IP地址是以网络号和主机号来标示网络上的主机的,只有在一个网络号下的计算机之间才能"直接"互通,不同网络号的计算机要通过网关(Gateway)才能互通。但这样的划分在某些情况下显得并十分不灵活。为此IP网络还允许划分成更小的网络,称为子网(Subnet),这样就产生了子网掩码。子网掩码的作用就是用来判断任意两个IP地址是否属于同一子网络,这时只有在同一子网的计算机才能"直接"互通。那么怎样确定子网掩码呢? 前面讲到I**P地址分网络号和主机号,要将一个网络划分为多个子网,因此网络号将要占用原来的主机位,如对于一个C类地址,它用21位来标识网络号,要将其划分为2个子网则需要占用1位原来的主机标识位。此时网络号位变为22位为主机标示变为7位**。**同理借用2个主机位则可以将一个C类网络划分为4个子网**……那计算机是怎样才知道这一网络是否划分了子网呢?这就可以从子网掩码中看出。子网掩码和IP地址一样有32bit,**确定子网掩码的方法是其与IP地址中标识网络号的所有对应位都用"1",而与主机号对应的位都是"0"。**如分为2个子网的C类IP地址用22位来标识网络号,则其子网掩码为:1111111111111111 1111111110000000即255.255.255.128。于是我们可以知道,A类地址的缺省子网掩码为255.0.0.0,B类为255.255.0.0,C类为255.255.255.0。下表是C类地址子网划分及相关子网掩码: 子网位数     子网掩码                                              主机数         可用主机数 1              255.255.255.128                                    128                126 2              255.255.255.192                                     64                   62 3               255.255.255.224                                    32                   30 4                255.255.255.240                                   16                    14 5                255.255.255.248                                    8                      6 6                 255.255.255.252                                   4                      2 你可能注意到上表分**了主机数和可用主机数两项**,这是为什么呢?**因为但当地址的所有主机位都为"0"时,这一地址为线路(或子网)地址,而当所有主机位都为"1"时为广播地址**(255)。 同时我们还可以使用可变长掩码(VLSM)就是指一个网络可以用不同的掩码进行配置。这样做的目的是为了使把一个网络划分成多个子网更加方便。在没有VLSM的情况下,一个网络只能使用一种子网掩码,这就限制了在给定的子网数目条件下主机的数目。例如你被分配了一个C类地址,网络号为192.168.10.0,而你现在需要将其划分为三个子网,其中一个子网有100台主机,其余的两个子网有50台主机。我们知道一个C类地址有254个可用地址,那么你如何选择子网掩码呢?从上表中我们发现,当我们在所有子网中都使用一个子网掩码时这一问题是无法解决的。此时VLSM就派上了用场,我们可以在100个主机的子网使用255.255.255.128这一掩码,它可以使用192.168.10.0到192.168.10.127这128个IP地址,其中可用主机号为126个。我们再把剩下的192.168.10.128到192.168.10.255这128个IP地址分成两个子网,子网掩码为255.255.255.192。其中一个子网的地址从192.168.10.128到192.168.10.191,另一子网的地址从192.168.10.192到192.168.10.255。子网掩码为255.255.255.192每个子网的可用主机地址都为62个,这样就达到了要求。可以看出合理使用子网掩码,可以使IP地址更加便于管理和控制。

(1)首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

(2)当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。

(3)当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。

(4)源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。