TCP/IP简略描述

1 TCP/IP是什么

一种传输协议族群,它底下包含不少协议。 那么什么是传输协议? 他是不同主机之间传输信息用到的所谓的共同语言。也就是我发送数据起码得用一个已经拟定好的规则来约束内容,以方便别人能认出来这到底是个啥,能不能接,接怎么个规则来解析数据吧。这里面的潜规则暂且理解为网络协议,也就是一些乱七八糟的规则。那么TCP/IP 作为一个协议具体干了啥呢?首先他起码可以把信息整成另一端可以认出来的东西吧,他得知道我这个信息到底要发到哪里吧。在接收到信息之后,起码另一端可以根据那些死规定把数据还原吧。数据传的得准确吧。传不上去怎么办?丢了包怎么办?阻塞了怎么办?都是这丫要搞得事情。看看百度上的解释吧。

TCP/IP(Transmission Control Protocol/Internet Protocol [2]  ),为传输控制协议/互联网络协议。 TCP/IP(传输控制协议/网间协议)是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。TCP/IP是INTERNET的基础协议,也是一种电脑数据打包和寻址的标准方法。在数据传送中,可以形象地理解为有两个信封,TCP和IP就像是信封,要传递的信息被划分成若干段,每一段塞入一个TCP信封,并在该信封面上记录有分段号的信息,再将TCP信封塞入IP大信封,发送上网。在接受端,一个TCP软件包收集信封,抽出数据,按发送前的顺序还原,并加以校验,若发现差错,TCP将会要求重发。因此,TCP/IP在INTERNET中几乎可以无差错地传送数据。 对普通用户来说,并不需要了解网络协议的整个结构,仅需了解IP的地址格式,即可与世界各地进行网络通信

2 TCP/IP 的分层。

以通讯设备传输整个体系的设计尿性,以及大家希望的高内聚低耦合互相不耽搁等特点。TCP/IP也是采用的分层架构来实现的。分了四层:链路层,互联网链接层,传输层,应用层。

应用层:文件传输,电子邮件,文件服务,虚拟终端

传输层:端到端的传输工作,即主机到主机之间的传输工作。起作用是 格式化信息流,提供可靠性传输,为了实现可靠性传输,传输层的协议规定接收端发回确认,并且假设分组数据发生丢失必须重新传送。

网络层:负责相邻计算机之间的通信,他的功能主要包括三个方面。一是处理来自传输层分组发送的请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发送到适当的网络接口。二是处理输入数据报,首先检查其合法性,然后进行寻径--假设该数据报已经到达了信宿机,则去掉报头,将剩下的部分交给适当的传输协议。加入该数据报尚未到达信宿机,则转发该数据报。三是,处理路径,控流,拥塞等问题。这一层的数据单位是数据包。咱们平常用的ping 查看可不可以连接其实就是用了一个ICMP协议的echo包,通过回送的echo relay进行网络测试。 这个层包含了不少协议。 IP, ICMP控制报文协议, ARP地址转换协议, RARP 反地址转换协议。其中IP是网络层的核心协议。

链路层:传输带有地址的帧,帧是这一层数据单位。并且带有检测错误的功能。

物理层:以二进制的格式在物理媒体上传输数据。

3 各层之间涉及到的各种协议

    应用层:HTTP,TFIP,SNMP, FTP, SMTP, DNS, Telnet

    传输层:TCP, UDP

    网络层:IP, ICMP, RIP, OSPE, BGP, IGMP

    链路层:SLIP, CALIP, PPP, ARP, RARP, MTU

    物理层:ISO2110, IEEE802, IEEE802.2

    需要掌握的是 HTTP,TCP,UDP,IP。

4 HTTP 协议

    HTTP协议,全名超文本传输协议。是一个基于TCP/IP通信协议来传输数据(HTML文件, 图片,查询结果等)。是属于应用层的面向对象协议。HTTP协议工作于客户端-服务端架构之上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。WEB服务器根据接受到的请求后,向客户端发送响应信息。

    客户端向服务端发送一个HTTP请求,其消息格式大约是这样的:

    请求行,请求头部,空行,请求数据。

    请求方法 空格 URL 空格 协议版本 回车符 换行符 

    头部字段名 :值 回车符 换行符

    头部字段名 : 值 回车符 换行符

      回车符 换行符

        请求数据。。。。

        其中请求方法包括 get, post,head 等。熟悉吧,代码中用到了吧。

    Post 和 Get 的请求区别

        Get,请求的数据会附在URL之后,以?分割URL和传输数据,多个参数的话用&连接

        Post的话,会把数据挣到HTTP包的包体中。故,get提交的数据会在地址栏中显示出来,而Post地址栏是不会变的

        Get 在某些特殊的浏览器和服务器上,对URL有长度限制,因此对于Get提交时,传输数据会受到限制

        Posy因为不是根据URL传值,理论上不会受限制。但实际上各个WEB服务器会规定对POST提交的数据进行大小限制。

        安全性上 Post 比 get要安全。这个应该是重点。

5 TCP协议。程序员基础,必须知道!

    首先它工作在传输层。是一个超级麻烦的协议。传输层中的数据一般叫segment。并且我们要知道,数据从应用层传下来,会在每一层都加上头部信息,进行封装,然后发送到数据接收端。那么这样的话,每一个数据都要经过数据的封装和解封装这个过程、接下来看看TCP这个协议,他的数据格式是啥样子的呢?这个非常非常重要!

OSI含义

复制粘贴的图。很重要很重要。这个图只是说明TCP的头。一个头就这恶心。。。

第一行 Source Port 和 Destination Port 顾名思义 字段端口和目的地端口。分别占用16位,表示端口号和目的端口号,用于区别主机中不同的进程,而IP地址就是用来区别不同主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能确定一个唯一确定的TCP连接。

第二行Sequence Number 中文翻译为序列号。用于标识从TCP发送端到TCP接收端发送的数据字节流,他表示在这个报文段中的第一个数据字节在数据流中的序号,主要用于解决网络报乱序的问题。看来还是比较好理解的。

第三行 Acknowledgement Number 感谢号,翻译简直了。应该是回馈之类的意思。 32位确认序列号包发送确认的一端所期望收到的下一个序列号。因此确认序列号当是上次已经成功接收到的数据字节序列号加一。不过只有当标志位中的ACK标志是1的时候该确认序列号字段才会有效,主要是用来解决丢包的问题。有点意思!那么ACK是啥?他是一个标志用来表达应答域有效。0是无效,1是有效

第四行 很多哈

        Offset,我靠这个解释我看不懂。抄下来吧。 具体解释为:给出首部中32Bit字的数目,需要这个值是因为任选字段的长度是可变的,这个字段站4字节(最多能标识15个32bit的字,即4*15=60个字节的首部长度),因此TCP中最多有60字节的首部,然而如果没有任选字段,正常的长度是20字节。

        Reserved 这个没讲,应该是不重要。

        TCP Flags:看图可以看到底下的几个字母。这些代表TCP首部的6个标志比特,他们中的多个可以被同时设置为1,主要用于操控TCP的状态机的,依次为 URG, ACK, PSH, SYN, FIN。含义如下

                URG:标识TCP包的紧急指针域有效。用于保证TCP连接中不会被中断,并且督促中间层设备要尽快处理这些数据。

                ACK:此标志标识答应域有效,0 无效, 1 有效

                SPH:这个标志位代表Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区排队。

                RST:表示连接复位请求。用来复位那些产生错误的连接,也用来拒绝错误和非法的数据包。

                SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被响应的时候,SYN=1, ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描着发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来,就表明这台主机存在这个端口;但由于这种扫描方式只是TCP三次握手的第一次握手,因此这种扫描的程功表示被扫描的机器很不安全。一个安全的主机将会强制要求一个连接严格的进行TCP三次握手。

                FIN:表示发送端已经到大数据末尾,也就是双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用来进行端口扫描。、

        Window:窗口大小,也就是有名的滑动窗口,用来控制流量,这是一个很复杂的问题。


        那么上面提到的三次握手是什么?这个很重要很重要!我承认大学学的知识被狗吃了、这张图我记得,,但是具体说明什么我已经体会不到了。哎。

三次握手又是什么

TCP是面向连接的,无论是哪一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号,并交换TCP窗口大小信息。下面是三次握手的细节。

1 第一次握手:建立连接,客户端发送连接请求报文段,将SYN的位置设置为1(我要同步序号),Sequence Number设置为x,客户端进入SYN_SEND状态,等待服务器确认。

2 第二次握手:服务器收到了SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number 为 x + 1, 因为上个收到的是x所以加了1,同时,自己还要发送SYN请求信息,将SYN的位置设置为1(那咱同步一下), Sequence Number设置为y,服务端将看上述所有信息放到一个报文段中,并发送给客户端,此时服务器进入了SYN_RECV状态

3 第三次握手: 客户端收到服务器发来的报文段后,将Acknowledgement Number 设置为y + 1,向服务端发送ACK报文段,这个报文段发送完毕以后,客户端和服务端都进入了ESTABLISHED状态,完成第三次握手。

然后就是一来一回的传数据了

接着传完了数据就要进行四次分手了:当客户端和服务器通过三次握手之后建立了TCP连接之后,将数据传输完毕,肯定是要断开连接的,那对于TCP的断开连接就有了神秘的四次分手。

1 第一次分手:主机1(可以是客户端也可以是服务端),设置Sequence Number和Acknowlwdgment Number,向主机2发送一个FIN报文段,这个上面讲了,传送完毕送的东西,此时主机1进入FIN_WAIT_1状态,表示主机1没有数据要发送给主机2了。

2 第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回了一个ACK报文段,Acknowlwdgment Number 为Sequence Number加1,主机1进入FIN_WAIT_2的状态,用以告诉主机1,哈哈哈老娘也没啥可以发送的了,可以关闭连接了。

3 第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入CLOSE_WAIT状态。

4 第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态,主机2收到主机1的ACK报文段以后,就关闭连接,此时主机1等待2msl后依然没有收到回复,则则证明server端已经正常关闭,那好主机1页关闭吧。

自此。TCP的四次分手就愉快的完成了。

三次握手的原因:

既然总结了TCP的三次握手,那么为什么非得要三次呢?明明两次确认连接不就得了呗。那为什么非得再多一次连接啊?再谢希仁的计算机网络中是这样说的:

为了防止已经失效的连接请求报文突然又传到了服务端,因而产生错误。如以下例子,已失效的连接请求报文段的产生在这样一种情况下,client发出的第一个连接请求报文段并没有丢失,而是在某个网络节点长时间滞留了,以致于延误到链接释放后的某个时间才到达server,这本来就是一个早已经失效的报文段,但是server收到这个是小的连接请求后,误认为是client再次发出的一个新的连接请求,于是向client发出确认报文段,同意建立连接后,假设不采取三次握手,那么只要server发出确认,新的连接就已经建立了,由于现在client并没有发出连接请求,因此不会理睬server的确认,也不会向server发送数据,因为上个过于延时没有确认我客户端的连接自己因为延时早就自己把自己结束了,这个连接不存在,我不会向你发数据的。但是server不知道啊,傻傻的开着等。。。这样的状况出的多的话,server的很多资源就会被浪费掉。采用三次握手的办法可以防止上述现象的发生。client不会向server确认发出确认,server由于收不到确认,就知道client并没有要求建立连接。尽量的减少服务端的一直等待而浪费资源。

那么至于分手,为什么也要四次呢?

TCP协议是面向连接的可靠的基于字节流的运输层通信协议。TCP是双工模式,这就意味着,当主机请发送FIN报文段时,表示主机1已经没有数据要发送了,主机1告诉主机2,他的数据已经发送完了。但是这时候主机1还是可以接收来自主机2的数据的。当主机2返回ACK报文段时,表示他已经知道主机1没有数据要发送了,但是主机2还是可以发送到主机1的。当主机2页发送了fin报文段的时候,就表示主机2也没有数据可发送了,就会告诉主机1,我也没数据要发送了,之后彼此就会愉快的中断这次TCP连接。

详情见 http://network.51cto.com/art/201411/456783.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

娅娅梨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值