TCP / IP 介绍

[b]OSI七层模型:[/b]

OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI 七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能使就是帮助不同类型的主机实现数据传输。它的最大优点是将服务、接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。


[img]http://dl2.iteye.com/upload/attachment/0112/5490/413e23d9-a847-3206-ad50-8cfc650f4dc3.jpg[/img]


[b]模型优点[/b]

建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题。
它的最大优点是将服务、接口和协议这三个概念明确地区分开来:服务说明某一层为上一层提供一些什么功能,接口说明上一层如何使用下层的服务,而协议涉及如何实现本层的服务;这样各层之间具有很强的独立性,互连网络中各实体采用什么样的协议是没有限制的,只要向上提供相同的服务并且不改变相邻层的接口就可以了。
网络七层的划分也是为了使网络的不同功能模块(不同层次)分担起不同的职责,从而带来如下好处:   
● 减轻问题的复杂程度,一旦网络发生故障,可迅速定位故障所处层次,便于查找和纠错;   
● 在各层分别定义标准接口,使具备相同对等层的不同网络设备能实现互操作,各层之间则相对独立,一种高层协议可放在多种低层协议上运行;   
● 能有效刺激网络技术革新,因为每次更新都可以在小范围内进行,不需对整个网络动大手术;   


[b]一.物理层(Physical Layer)[/b]

OSI 模型的最低层或第一层,该层包括物理连网媒介,如电缆连线连接器。物理层的协议产生并检测电压以便发送和接收携带数据的信号。在你的桌面P C 上插入网络接口卡,你就建立了计算机连网的基础。换言之,你提供了一个物理层。尽管物理层不提供纠错服务,但它能够设定数据传输速率并监测数据出错率。网络物理问题,如电线断开,将影响物理层。
  用户要传递信息就要利用一些物理媒体,如双绞线、同轴电缆等,但具体的物理媒体并不在OSI的7层之内,有人把物理媒体当做第0层,物理层的任务就是为它的上一层提供一个物理连接,以及它们的机械、电气、功能和过程特性。如规定使用电缆和接头的类型、传送信号的电压等。
在这一层,数据还没有被组织,仅作为原始的位流或电气电压处理,单位是bit比特。

[b]二.数据链路层(Datalink Layer)[/b]

OSI模型的第二层,它控制网络层与物理层之间的通信。它的主要功能是如何在不可靠的物理线路上进行数据的可靠传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧。帧是用来移动数据的结构包,它不仅包括原始数据,还包括发送方和接收方的物理地址以及检错和控制信息。其中的地址确定了帧将发送到何处,而纠错和控制信息则确保帧无差错到达。 如果在传送数据时,接收点检测到所传数据中有差错,就要通知发送方重发这一帧。   
数据链路层的功能独立于网络和它的节点和所采用的物理层类型,它也不关心是否正在运行 Word 、Excel 或使用Internet 。有一些连接设备,如交换机,由于它们要对帧解码并使用帧信息将数据发送到正确的接收方,所以它们是工作在数据链路层的。
  数据链路层(DataLinkLayer):在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。   
数据链路层在不可靠的物理介质上提供可靠的传输。
该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。

  协议有:SDLC、HDLC、PPP、STP、帧中继等。

[b]三.网络层(Network Layer)[/b]

OSI 模型的第三层,其主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方。
  网络层通过综合考虑发送优先权、网络拥塞程度、服务质量以及可选路由的花费来决定从一个网络中节点A 到另一个网络中节点B 的最佳路径。由于网络层处理,并智能指导数据传送,路由器连接网络各段,所以路由器属于网络层。在网络中,“路由”是基于编址方案、使用模式以及可达性来指引数据的发送。  
 网络层负责在源机器和目标机器之间建立它们所使用的路由。这一层本身没有任何错误检测和修正机制,因此,网络层必须依赖于端端之间的由D L L提供的可靠传输服务。
  网络层用于本地L A N网段之上的计算机系统建立通信,它之所以可以这样做,是因为它有自己的路由地址结构,这种结构与第二层机器地址是分开的、独立的。这种协议称为路由或可路由协议。路由协议包括I P、N o v e l l公司的I P X以及A p p l e Ta l k协议。  
 网络层是可选的,它只用于当两个计算机系统处于不同的由路由器分割开的网段这种情况,或者当通信应用要求某种网络层或传输层提供的服务、特性或者能力时。例如,当两台主机处于同一个L A N网段的直接相连这种情况,它们之间的通信只使用L A N的通信机制就可以了。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

[b]四.传输层(Transport Layer)[/b]

OSI 模型中最重要的一层。传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。除此之外,传输层按照网络能处理的最大尺寸将较长的数据包进行强制分割。例如,以太网无法接收大于1 5 0 0 字节的数据包。发送方节点的传输层将数据分割成较小的数据片,同时对每一数据片安排一序列号,以便数据到达接收方节点的传输层时,能以正确的顺序重组。该过程即被称为排序。
  工作在传输层的一种服务是 T C P / I P 协议套中的T C P (传输控制协议),另一项传输层服务是I P X / S P X 协议集的S P X (序列包交换)。

协议有:TCP UDP

[b]五.会话层(Session Layer)[/b]

负责在网络中的两节点之间建立、维持和终止通信。 会话层的功能包括:建立通信链接,保持会话过程通信链接的畅通,同步两个节点之间的对话,决定通信是否被中断以及通信中断时决定从何处重新发送。
  你可能常常听到有人把会话层称作网络通信的“交通警察”。当通过拨号向你的 ISP (因特网服务提供商)请求连接到因特网时,ISP 服务器上的会话层向你与你的 PC 客户机上的会话层进行协商连接。若你的电话线偶然从墙上插孔脱落时,你终端机上的会话层将检测到连接中断并重新发起连接。会话层通过决定节点通信的优先级和通信时间的长短来设置通信期限

[b]六.表示层(Presentation Layer)[/b]

应用程序和网络之间的翻译官,在表示层,数据将按照网络能理解的方案进行格式化;这种格式化也因所使用网络的类型不同而不同。  
 表示层管理数据的解密与加密,如系统口令的处理。例如:在 Internet上查询你银行账户,使用的即是一种安全连接。你的账户数据在发送前被加密,在网络的另一端,表示层将对接收到的数据解密。除此之外,表示层协议还对图片和文件格式信息进行解码和编码。

[b]七.应用层(Application Layer)[/b]

应用层也称为应用实体(AE),它由若干个特定应用服务元素(SASE)和一个或多个公用应用服务元素(CASE)组成。每个SASE提供特定的应用服务,例如文件运输访问和管理(FTAM)、电子文电处理(MHS)、虚拟终端协议(VAP)等。CASE提供一组公用的应用服务,例如联系控制服务元素(ACSE)、可靠运输服务元素(RTSE)和远程操作服务元素(ROSE)等。
主要负责对软件提供接口以使程序能使用网络服务。
术语“应用层”并不是指运行在网络上的某个特别应用程序 ,应用层提供的服务包括文件传输、文件管理以及电子邮件的信息处理。

协议有:HTTP FTP TFTP SMTP SNMP DNS


[img]http://dl2.iteye.com/upload/attachment/0112/5525/a7e3858f-7b3a-327a-8019-1e9aa3d6ccfb.gif[/img]


[b]IP报文格式:[/b]


[img]http://dl2.iteye.com/upload/attachment/0112/5527/5c3fc01b-1689-33f3-9015-37d1f5d910d0.jpg[/img]


相关字段说明如下:

IP version:表示IP协议的版本号,IP协议版本有IPv4和IPv6这两种版本号,占4bit

(Hdr Len)Herader Length:首部长度,这个字段主要说明ip协议包头包含了多少个32bit的字节数。ip协议包头基本为20字节(4byte*5),这里的5表示是5行的意思。也就是说如果options选项中 不包含其他数据的话,那么ip协议报文的首部长度为20byte。由于首部长度占用4个bit,因此首部长度最大字节为15*4=60字节。

TOS:服务类型。用于表示ip数据包的服务类型,这个字段与qos有关,对于不同的ip数据包,给予不同的服务类型,那么该数据包被处理的方式不一样。占8bit

Total Length:ip包总长度,该长度为首部长度加上数据这部分就是总长度,因此可以利用包总长度和首部长度来计算出数据的大小,占16bit

Identification(Fragment ID):这是ip数据包的标识,如果ip数据包过大,那么数据包就会进行分段,这个标识就是确定哪些分段是同一个数据包的。占16bit
R:保留位,占1bit

DF:表示禁止分段,占1bit

MF:为1表示还有更多分段,占1bit

Fragment Offset:分段偏移,表示每个分段在整个数据包中的位置,以便重组数据包,占13bit

TTL:生存时间,每经过一个路由器都会减一,以便防环,占8bit

Protocol:用来标识上层协议的。由于tcp/udp等从四层协议或者其他三次协议都是通过ip来传输的,因此该字段用来说明该数据包处理完成后,交给哪一个上层协议来处理。占8bit

Header Checksum:校验和,用来验证ip数据包在传输过程中是否被损坏了。占16bit

Source IP Address:源ip地址,占32bit

Destination Ip Address:目标地址,占32bit

Options:可选选项,占32bit

Data:ip承载的数据,占32bit


[b]TCP报文格式:[/b]


[img]http://dl2.iteye.com/upload/attachment/0112/5529/37fe0d84-a4e3-37cc-ba85-13c967b113dd.jpg[/img]


相关字段说明如下:

Source port Number:源端口号,如果某个服务要想和外面主机通信。必须要监听在某个端口号上面才行,这样才能建立起连接。这个字段占16bit。因此总端口共有65536个。

Destination Port Number:目标端口号,占16bit。目标端口总共有65536个。

sequence Number:序列号,这个字段是用来标识报文发送时的顺序,以及接受后按着该字段的号码来排序处理。占32bit。

Acknowledge NUmber:确认号,是用来确认对方发送过来的信息是否收到。占32bit
确认号=(对方的)序列号+1

Header Length:首部长度,这个字段和ip协议中的首部字段差不多,该字段说明了tcp报文包含了多少个32byte的字节数。tcp基本报文大小为4byte*5=20byte,占4bit

Reserved:保留字段,占6bit

ACK:当ACK为1时,表示确认号是合法的;为0是,表示数据报文不包含确认信息,那么确认字段会被省略。占1bit

PSH:表示是带有PUSH标志的数据。接收方因此请求数据报一到便可送往应用程序而不必等到缓冲区装满时才传送,占1bit

RST:用于复位由于主机崩溃或其它原因而出现的错误的连接。还可以用于拒绝非法的数据报或拒绝连接请求,占1bit

SYN:表示请求建立连接,占1bit,SYN=1表示发送建立连接请求

FIN:表示是否断开连接,占1bit,为1表示断开连接

Windows Size:窗口大小,该字段说明了tcp报文在传输时最大的报文字节是多少,占16bit

TCP Checksum:tcp校验和,用来验证tcp报文在传输中是否被损坏,占16bit

Urgent Pointer:紧急指针


[b]TCP的三次握手:[/b]

[img]http://dl2.iteye.com/upload/attachment/0112/5610/02368ea9-7217-3d64-9387-7a2ad1502cc5.gif[/img]

[img]http://dl2.iteye.com/upload/attachment/0112/5612/8352b448-bfd9-3099-834f-96da9448002b.gif[/img]


[img]http://dl2.iteye.com/upload/attachment/0112/6571/e25e1f13-0294-36c6-9104-88d431215c44.jpg[/img]


TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接

在客户端和服务器端在没有建立连接之前,都处于CLOSED状态

1、第一次握手:首先client A向server B发起SYN请求,请求建立连接,此时client A的seq=100。此时client A处于SYN SENT状态,等待服务器B确认。

2、第二次握手:server B收到SYN请求后,准备对client A发起的SYN请求进行确认。且server B的ACK号=(clientA)seq号+1=101,并同时向client A发起建立SYN连接,此时server B的seq=300。并将其发送给client A。此时server B处于SYN RCVD状态。

3、第三次握手:client A收到server B发送的SYN请求,并准备对其进行确认。因此,此时的client A的ACK号=(server B)seq号+1=301,并将其发送给server B。此时client A和server B都处于ESTABLISHED状态,完成三次握手。


[b]TCP的四次断开:[/b]

[img]http://dl2.iteye.com/upload/attachment/0112/5614/a6dbd221-da01-311a-9c58-7d22f009a112.gif[/img]


[img]http://dl2.iteye.com/upload/attachment/0112/6573/222c015c-6f1e-3bad-8564-252faadc0aa5.png[/img]


由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

1、当client A要与server B断开连接时,会发送FIN请求,且此时报文中的FIN=1。此时client A进入WAIT 1状态。

2、当server B收到client A发送过来的FIN请求,并将会发送ACK报文,用来确认已收到报文。此时server B处于CLOSE WAIT状态。同时也会发送FIN(FIN=1)报文给client A,请求断开连接。此时server B处于LAST ACK状态。

3、当client A收到server B发送过来的ACK报文时,此时client A处于WAIT 2状态。并再次发送ACK报文给server B用来确认已收到FIN报文。此时client A处于TIME WAIT状态。其实在client A处于TIME WAIT状态前,有个CLOSING状态,这个状态是网络原因导致server B发送的FIN报文,client A没有收到时才会出现的,一旦server B重传后,client A收到后就会变成TIME WAIT状态。

4、在client A处于TIME WAIT状态时,经过2s(2MSL)后,client A就会断开连接,且处于CLOSED状态,进而server B也断开连接处于CLOSED状态。
说明:这里的2s也是用来等待client A发送的ack报文是否到达server B的,如果没有到达,则在这段时间内会重传。这个时间过后,client A就会断开连接。

这样,client A和server B经过四次断开就断开连接了。


【注意】中断连接端可以是Client端,也可以是Server端。
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!


[b]深入理解TCP连接的释放:[/b]

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。
首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
TCP协议的连接是全双工连接,一个TCP连接存在双向的读写通道。
简单说来是 “先关读,后关写”,一共需要四个阶段。以客户机发起关闭连接为例:
1.服务器读通道关闭
2.客户机写通道关闭
3.客户机读通道关闭
4.服务器写通道关闭

关闭行为是在发起方数据发送完毕之后,给对方发出一个FIN(finish)数据段。直到接收到对方发送的FIN,且对方收到了接收确认ACK之后,双方的数据通信完全结束,过程中每次接收都需要返回确认数据段ACK。

详细过程:
第一阶段:客户机发送完数据之后,向服务器发送一个FIN数据段,序列号为i;
1.服务器收到FIN(i)后,返回确认段ACK,序列号为i+1,关闭服务器读通道;
2.客户机收到ACK(i+1)后,关闭客户机写通道;
(此时,客户机仍能通过读通道读取服务器的数据,服务器仍能通过写通道写数据)
第二阶段:服务器发送完数据之后,向客户机发送一个FIN数据段,序列号为j;
3.客户机收到FIN(j)后,返回确认段ACK,序列号为j+1,关闭客户机读通道;
4.服务器收到ACK(j+1)后,关闭服务器写通道。

这是标准的TCP关闭两个阶段,服务器和客户机都可以发起关闭,完全对称。


[img]http://dl2.iteye.com/upload/attachment/0112/6575/95bd94ee-a42e-3c46-875b-16d43474cb89.png[/img]


[img]http://dl2.iteye.com/upload/attachment/0112/6567/dc5c2c0e-1eac-3888-9c65-bc1fdbf5680b.png[/img]

[b]位码即tcp标志位,有6种标示:[/b]

SYN(synchronous建立联机)

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束)

RST(reset重置)

URG(urgent紧急)

Sequence number(顺序号码)

Acknowledge number(确认号码)

[b]客户端TCP状态迁移:[/b]
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

[b]服务器TCP状态迁移:[/b]
CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

各个状态的意义如下:

LISTEN - 侦听来自远方TCP端口的连接请求;
SYN-SENT -在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求;
CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
CLOSING -等待远程TCP对连接中断的确认;
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值