当前位置:   article > 正文

【JavaEE初阶】万字详解TCP/IP协议!!!(一)_java 手写tcpip协议

java 手写tcpip协议

在这里插入图片描述

1. 应用层和传输层的联系

在网络通信过程中,应用层描述了应用程序如何理解和使用网络中的通信数据。
而程序猿在应用层这里最主要的工作就是自定义协议,自定义协议主要做两件事:

  1. 结合业务场景和需求,明确协议数据要传递哪些信息。
  2. 明确数据组织格式。(比如:可以按照纯文本方式,也可以使用xml,json,protobuffer

其中xmljson都是按照文本的方式来组织的, 优点是可读性好, 用户不需要借助其他工具, 肉眼就能看懂数据的含义, 缺点是要额外传很多的标签或键名, 占用较多的网络带宽, 影响效率; 而protobuffer会将文本数据压缩为二进制数据传输, 特点是肉眼无法解析, 但占用空间更小小, 传输占用的带宽也就降低了.

应用层也有知名并广泛使用的成品协议, 就比如 : HTTP协议.

传输层和应用层的联系:
除了最上层的应用层, 下面的传输层, 网络层, 数据链路层, 物理层这四层都是已经在系统内核/驱动程序/硬件中已经实现好了, 不许要我们去实现, 传输层是紧接着应用层的一层, 虽然传输层是操作系统内核实现好了, 但是我们在写应用层代码的时候, 是要调用系统的socket API去完成网络编程, 所以需要我们了解这里传输层的一些关键协议UDPTCP.

端口号的使用注意:
端口号是传输层协议的概念, TCPUDP协议的报头中都会包含源端口和目的端口, 并且都是使用2个字节, 16bit来表示端口号, 范围也就是 0 -> 65535; 但是我们日常写的程序使用的端口号一般都是从1024开始的, 因为0 -> 1023这个范围的端口号也称为 “知名端口号/具名端口号”, 这些端口号系统已经分配给了一些知名并广泛使用的应用程序.

这里我们并不是完全不能使用0 -> 1023这个范围的端口号, 只是建议使用, 虽然这些端口被分配给了特定程序, 但是这些程序是否在主机运行着, 主机上是否安装了这些程序都是不一定的, 要使用0 -> 1023这些端口, 需要注意2点 :

  1. 要确定这个端口没有和程序绑在一起.
  2. 要拥有管理员权限.

2. UDP协议

UDPUser Datagram Protocol的缩写, UDP的特点是无连接, 不可靠传输, 面向数据报, 全双工, UDP使用起来简单高效, 但它的数据载荷较小.

UDP协议报文结构(教材中):
在这里插入图片描述
但实际中,以下方式更为合理:
在这里插入图片描述
UDP就会把载荷数据(就是通过UDP socket,也就是send()方法拿来的)的基础上再前面拼接上几个字节的报头。此处的拼接相当于字符串拼接。(此处是二进制的,不是文本的)
UDP报头中就包含了一些特定的属性,就携带了一些重要的信息。不同的协议,功能不同,报头中带有的属性信息就不同。
对于UDP来说,报头一共就是8个字节,分为4部分(每个部分2字节)。2个字节表示的范围是0-->65535,换算单位为64KB。也就是一个UDP数据报,最大只能传输64KB的数据。

在当下的时代,64KB是一个很小的量。如果应用层数据报超过了64KB,怎么办呢?

  1. 需要在应用层,通过代码的方式针对应用层数据报进行手动的分包,拆成多个包通过多个UDP数据报进行传输。(本来要send一次,现在需要send多次)。举个 本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签