【TCP/UDP】java的网络编程干货

举报
杨小羊 发表于 2020/09/28 16:40:04 2020/09/28
【摘要】 学习网络编程的入门步骤。

1.网络编程补充

IP地址

IP地址是指互联网协议地址(更多的时候是互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异)

ip地址一般是由32位二进制组成,已知ip地址是分为四段,所以又32/4=8位,所以每一段的取值个数是2^8=256个(包括0)

但是在二进制里面,是包括0的,所以每一段取值为0-255这个值。

分为a b c d e 五类

a   0+7位网络号 (紫色)+主机号(绿色部分)  1.0.0.0 到  127.255.255.255 之间 b   10+14位网络号 +主机号 127.0.0.0 到191.255.255.255之间 c   110+21位网络号 +主机号 192.0.0.0 到 223.255.255.255

d   1110+多点播送地址    224.0.0.0 到 239.255.255.255 e   11110+留做将来使用 240.0.0.0+ 247.255.255.255    


网络号在分配给商家的时候,是固定的,后面的主机号是可变的。

a地址表示开头第一段的值,因为最大是7位,而且不包括0,所以取值为1-127,后面的三段地址都可以获取0-255值。

那么a地址,后面三段都是可变的地址,而开头一段是固定在某个范围内,所以a地址就有127个这种地址,不算后面可变的。那么其分配给主机的时候,那么就是127 *255 * 255 *255

注意商家在得到一个地址的时候,因为第一段地址的固定的,所以对于商家来说,a类地址很珍贵。因为可变的部分是作为你可以分配的主机

所以一个a类地址拥有的主机数量有: (0-255包括0,所以)256 * 256 * 256个地址

目前普遍使用最多的是c类地址。目前公司内部就是使用C类地址

本地回路地址

127.0.0.1——这地址只能作为自己的一个本地回路地址,不能作为网络上的一个ip地址

计算机中正确安装TCP/IP协议后,计算机中都会有一个称做本地回路的地址 发往 127.0.0.1 的数据不经过网卡传递, 而是指接被本地计算机中Tcp/ip协议栈中的几个上层协议接收,是一个用于本地计算机上使用的特殊地址,使用Ping 就可以检查TCP/IP协议是否正确安装,它没有和网卡绑定,网卡没有正确连接或是没有网线的情况下,仍可使用该地址

端口

因为一个计算机上同时可运行多个网络程序,而IP地址只能保证把数据送到某个计算机上,但不能保证把数据交给计算机上的每个程序,因此每个发送的网络数据包的头部,都包含有一个称为端口号的整数

系统保留的端口有1-1023,这些不能使用

2.网络协议

规定了计算机之间连接的物在机械,电器等特性,及计算机间的相互寻址规则,和以数据发送冲突的解决办法,分段传输与解决大数据包的传输方式等等

简单理解为:因为互联网出来之后,为了能够清楚数据之间的交互,让数据的传输有规章(例如:你在中国,说中文才让人容易懂你讲了什么。去外国,你说中文老外不知道,但是说英语可以明白你想要干嘛什么。)

  • . HTTP1.1(Hypertext Transfer Protocol Vertion 1.1)超文本传输协议-版本1.1 . ARP(Address Resolution Protocol)地址解析协议 . SNMP(Simple Network Management Protocol)网络管理协议 . CMIP(Common Management Information Protocol)通用管理信息协议 . DHCP(Dynamic Host Configuration Protocol)动态主机配置协议 . *FTP(File Transfer Protocol)文件传输协议 . IPv6(Internet Protocol Version 6)Internet协议-版本6 . IPX/SPX(Internetwork Packet Exchange/Sequential PacketExchange)互连网包交换/顺序包交换 . *POP3(Post Office Protocol Version 3)邮局协议-版本3 . PPP(Point to Point Protocol)点对点协议 . *SMTP(Simple Mail Transfer Protocol)简单邮件传送协议 . TELNET Protocol虚拟终端协议 . *UDP(User Datagram Protocol)用户数据报协议

目前不用记住网络协议。大概明白协议的作用,明白在互联网的数据传输需要些什么。

3.OSI参考模型  (iso是国际标准化组织)

  OSI参考模型 (Open System Interconnect 开放式网络互联)  // TCP/IP参考模型

七层:

应用层 Application 一些终端应用
表示层 Presentation  对接收的数据进行解释,加密和解密(把计算机能识别的东西.转换成人能识别的东西)如图片声音等
会话层 Session 建立数据传输通路
传输层 Transport 定义了一些数据传输的协议和端口号 常把这一层的数据叫段 //网关
网络层 Transport 将从下层接收到的数据进行IP地址的封装和解装 在这一层工作的设备叫路由器, 常把这层的数据叫包
数据链路层 Data Link 将从物理层接收的数据进行MAC(网卡地址)的封装和解装,常把这一层的数据叫帧 在这一层工作的设备叫交换机,网卡,网桥
物理层 Physical,这一层的数据叫比特 //光纤

TCP/IP分层模型(TCP/IP Layening Model)被称作因特网分层模型(Internet Layering Model)、因特网参考模型(Internet Reference Model)。简化了OSI模型

第四层,应用层(会话层、表示层、应用层)
第三层,传输层(传输层)
第二层,网间层(网络层 )
第一层,网络接口层(物理层、数据链路层)

4.UDP/TCP

与上面的介绍的TCP不是用一个概念,上面的在分层模型上概念上介绍

TCP (Transmission Control Protocol )

传输控制协议,是面向连接的通信协议,提供两台计算机之间的可靠和无差错的数据传输,数据源和目标之间或建立一个虚拟的连接,建立后,计算机之间就会把数据,当作双向字节流进行交换

三次握手

  1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。

  2. 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。

  3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

    简单理解就是:

    我与老王准备发送数据,首先老王在准备了(服务器被动打开)。

    我先问老王“我可以和你连接了吗?”——第一次握手

    老王反馈说“可以”——第二次握手

    我再对老王说“那我开始咯”——第三次握手

    最终创建连接


UDP

用户数据报协议,(USER datagram Protocol) 是无连接的通信协议,不保证数据的可靠传输,能够向若干个目标发送和接收数据,数据包会有丢失\的时候

简单理解就是:
我发送数据给老王,我不问老王在不在,直接发送数据

TCP、UDP  数据包的帧格式

     TCP与UDP传输数据的过程中,大概知道下他们传输的内容(不做重点,因为io流会我们实现)
    协议类型  源IP       目标IP   源端口  目标端口  帧序号 帧数据
    协议类型用来区分  用的是哪个协议,是UDP 还是TCP

5.套接字 Socket 简介

网络驱动程序提供给应用程序编程的接口和一种机制 可以比喻成一个港口码头 应用程序只要把货放在这,就算完成了货物的运送 它在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自已对应的IP 和 Port

java中用于网络通讯的包是 java.net 包

Socket //用于TCP通讯的客户端 ServerSocket //用于TCP通讯的服务端

DatagramSocket  //用于UDP 通讯

6.TCP Socket 开发步骤

  • 服务端 // 1.创建一个ServerSocket对象 // 2.调用accept()方法接受客户端请求(建立连接) // 3.获取socket对象的输入输出流 // 4.读取客户端传过来的数据 // 5.关闭流 // 6.关闭连接

  • 客户端 // 1.创建一个Socket对象(相当于建立了连接) // 2.获取输出流 // 3.输出内容 // 4.关闭流 // 5.断开连接

练习:利用TCP连接,服务端多线程处理,可以接收多个客户端的连接

7.UDP Socket开发步骤

  • 服务端 // 1.创建DatagramSocket对象,并且声明端口 // 2.创建接受包 // 3.通过socket调用receive等待包内容 // 4.接收到包后解释包内容 // 5.关闭DatagramSocket

  • 客户端

    // 1.创建DatagramSocket对象,并且声明端口(客户端端口可以省略,对于客户端不关注端口) // 2.把发送的内容封装到DatagramPacket并且把服务端的IP以及端口带上 // 3.发送DatagramPacket // 4.关闭DatagramSocket

  • 飞秋格式 端口号 2425 byte[] buffer = ("1:" + new Date().getTime() + ":" + SENDER + ":"HOST + ":" + IPMSG_SENDMSG + ":" + MSG_CONTENT).getBytes("gbk");


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。