【Java网络编程一】TCP/IP协议介绍

千磨万击还坚劲,任尔东西南北风。———郑板桥《竹石》竹子任凭风雨的打击磨砺,依然不改坚劲本色。

TCP/IP 参考模型

看完并发编程,接着继续看Java网络编程,不要停!

下面是 OSI 参考模型和 TCP/IP 参考模型的比较。TCP/IP 参考模型吸取了网络分层的思想,但是对他的层次做了简化,并且在网络各层(除了主机-网络层外)都提供了完善的协议,这些协议构成了 TCP/IP 协议集,简称 TCP/IP 协议。

各层的协议如下所示:

主机-网络层:实际上 TCP/IP 参考模型没有真正提供这一次的实现,也没有提供协议。它只要求第三方实现的主机-网络层能够为上一层的网络互联层提供一个访问接口,使得网络互联层能利用主机-网络层来传递 IP 数据包。

网络互联层: 它是整个参考模型的核心。他的功能是把 IP 数据包发送到目标主机。同时,为了尽快的发送数据,IP 协议把原始数据分为多个数据包,然后沿不同的路径同时传递数据包。

传输层:它的功能是使源主机和目标主机上的进程可以进行会话。在传输层定义了两种服务质量不同的协议,即1. TCP (Transmission Control Protocol, 传输控制协议)2. UDP (User Datagram Protocol, 用户数据报协议)

应用层:TCP/IP 模型将 OSI 参考模型中的会话层和表示层合并到应用层。针对各种各样的网络应用,应用层引入了许多协议。(1)基于 UDP 协议的应用层协议包括:SNMP(网络管理协议)、DNS( 2 ) 基于 TCP 协议的应用层协议包括:FTP、TELNET(虚拟终端协议)、HTTP、HTTPS(安全超文本传输协议)、POP3(邮局协议版本3)、IMAP4(Internet 消息访问协议版本4)、SMTP。

TCP 协议

TCP 协议是一种面向连接的、可靠的协议。(1)它将源主机发送的字节流无差错的发送给互联网上的目标主机。在发送端,TCP 协议负责把上层传送下来的数据分成报文并传递给下层。(2)在接收端,TCP 协议负责把收到的报文重组后递送给上传。(3)TCP 协议还需处理端到端的流量控制,以避免接收速度缓慢的接收方没有足够的缓冲区来接收发送方发送的大量数据。

UDP 协议

UDP 协议是一个不可靠的、无连接协议,主要使用于不需要对报文进行排序和流量控制的场合。(1)UDP 不能保证数据报接收的顺序同发送的顺序相同,甚至不能保证他们是否全部到达目标主机。

综上所述,如果要求可靠的数据传输,则应该避免使用 UDP 协议,而使用 TCP 协议。

IP 协议

IP 网络中每台主机都有唯一的 IP 地址。主机实际上有两个不同性子的地址:物理地址和 IP 地址。物理地址是由主机上的网卡来标识,物理地址才是主机的真实地址。(1)IP 是面向包的协议,即数据被分成若干小数据包,然后分别传输他们。(2)IP 协议,当源主机和目标主机在同一个网络上时,能够直接发送数据包到目标主机。当目标主机在另一个网络时,需要通过 ARP协议,即地址解析协议,获得目标主机的物理地址,然后再把包发给对方。(3)IP 协议并不保证一定把数据包送达目标主机,在发送过程中,会因为数据包结束生命周期或者找不到路由而丢弃数据包。

TCP 协议及端口

IP 协议在发送数据包时,发生数据包丢失或者顺序搞乱时,TCP 协议依然能够保证两台主机上的进程顺利通信,不担心这两个问题的发生。因为 TCP 跟踪包顺序,并且在包顺序搞乱时按正确顺序重组包。如果包丢失,则 TCP 会请求源主机重发包。

TCP 采用端口来区分进程间通信。如下图所示

端口号的范围为 0~65535,其中 0~1023 的端口号一般固定分配给一些服务。1024~65535的端口号供用户自定义服务使用。TCP 和 UDP 用的端口是相互独立的,即允许存在取值相同的 TCP 端口和 UDP 端口。如下图所示

应用层一些通用服务使用的端口如下

参考

《Java网络编程精解》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180816G1WAD300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券