JAVA基础知识|TCP/IP协议

虽然写代码也有一定的年头了,但是对于一些基础概念,还是很模糊。这在后来的学习过程中,带来了很大的痛苦,所以痛定思痛,决心重新学习这些概念。并把自己的理解和查询的资料做一些整合,便于以后查阅!

一、什么是TCP/IP?

TCP/IP协议是一个协议集合,包括我们常见的HTTP协议、IP协议、TCP协议、DNS协议等,都属于TCP/IP协议。

要想知道TCP/IP是什么,我们首先要知道为什么要有这个协议?拿一个生活中简单的例子来说,如果我们想做一个柜子,那我们就要告诉木匠,柜子要多高、多宽、多长,样式是什么样的、材质是什么样的等等,这样最后做出的柜子才能和我们想要的柜子一致,那么这些规则就可以理解为一种口头协议。同样的,两台电脑想要在全球亿万台计算机中完成准确、无误的通信,大量的协议支持是必不可少的。

TCP/IP协议中有一个重要的概念是分层,每个层级完成不同的功能。TCP/IP协议按照层次分为以下四层:应用层、传输层、网络层、数据链路层。为什么要分层?分层的目的就是为了层级之间的功能相对独立,互不影响。

                    

 TCP/IP通信数据流

                             

二、HTTP、TCP、IP、DNS协议

2.1、HTTP协议(HyperText Transfer Protocol),超文本传输协议

HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。

请查看JAVA基础知识|IP协议

2.2、IP协议(Internet protocol)

IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个重要的条件是IP地址,和MAC地址。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的,除去人为因素外不可能重复。

IP实现两个基本功能:寻址和分段

寻址功能就是在源地址与目标地址之间建立连接,这个过程需要使用ARP协议(Address Resolution Protocol)。举一个现实生活中的例子,如果你想从北京的家里到上海迪士尼乐园玩,那么首先你需要走到地铁站,然后坐车到高铁站,再坐高铁到上海火车站,然后再转地铁到上海迪士尼乐园。IP协议完成的工作就是在两台电脑之间找到一条这样的路径,从而完成数据的交互。

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议,并根据通信方的 IP 地址就可以反查出对应的 MAC 地址,从而进行精确定位,完成寻址的功能。

分段功能是为了适应不同网络对包大小的要求,对数据进行重新组装。

以下是图示:

                            

2.3、TCP协议(Transmission Control Protocol),传输控制协议

如果说IP协议是找到对方的详细地址。那么TCP协议就是安全的把东西带给对方。各有分工,互不冲突。

      按层次分,TCP属于传输层,提供可靠的字节流服务。什么叫字节流服务呢?这个名字听起来让人不知所以然,下面听下我通俗的解释。所谓的字节流,其实就类似于信息切割。比如你是一个卖自行车的,你要去送货。安装好的自行车,太过庞大,又不稳定,容易损伤。不如直接把自行车拆开来,每个零件上都贴上收货人的姓名。最后送到后按照把属于同一个人的自行车再组装起来,这个拆解、运输、拼装的过程其实就是TCP字节流的过程。

     我们看下严谨的学术表达是怎样的:

     所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之,TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。

     为了确保信息能够确保准确无误的到达,TCP采用了著名的三次握手策略(three-way handshaking)。

 

TCP在建立连接的时候需要三次握手,在关闭连接的时候,还需要四次挥手。

为什么要三次握手,四次挥手?

最重要的原因当然是为了连接的安全可靠,因为可能由于网络延迟等缘故,第一次握手时,在时间已经超时后客户端的syn才到达服务器端;这个时候尽管客户端知道已经超时失效了,而服务器端还不知道,以为是刚刚发过来的,会回复一个ACK,统一建立连接。如果不采用三次握手,则此时服务器端发出确认后,连接就正式建立,但是因为客户端并没有发出建立连接的请求,也就不会回应服务器端的ACK,也不会向服务器端发数据。所以服务器端就会一直处于等待状态,浪费了大量的资源。采用三次握手后,由于服务器向客户端发了SYN后得不到确认,就知道客户端并没有要求建立连接。

关于断开时需要采用的四次挥手,过程和三次握手比较类似,就是在客户端第一次发关闭连接的FIN时,服务器端先发送ACK确认已经收到,然后等服务器自身完成之前所有报文发送后,再向客户端发送FIN,告知可以关闭了,最后客户端收到后再向服务器端发送一个ACK进行关闭。

2.4、DNS协议(Domain names System)

和HTTP协议一样是处于应用层的服务,提供域名到IP地址之间的解析服务。

互联网之间是通过IP地址通信的,但是IP地址并不符合认得记忆习惯,人喜欢记忆有意义的字词。所以DNS服务就为了解决这个问题而生了。其实很好理解,形如我们电脑中host文件。

192.168.1.11       roverliang.com  

当我们访问roverliang.com 的时候,电脑便不会去外网服务器上查询了,直接去访问192.168.1.111。这是一个简单的域名劫持,足以说明DNS的涵义了。

下面是我们访问一个网页,各种协议在里面起的作用。

posted @ 2017-12-15 15:11  无聊的三文鸡  阅读(7882)  评论(0编辑  收藏  举报