第16章:随堂复习与企业真题(网络编程)

一、随堂复习

1. 网络编程概述

  • 计算机网络:略

  • 网络编程的目的:直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯。

  • 需要解决的三个问题:

    • 问题1:如何准确地定位网络上一台或多台主机

    • 问题2:如何定位主机上的特定的应用

    • 问题3:找到主机后,如何可靠、高效地进行数据传输

2. 要素1:IP地址

  • 使用具体的一个ip地址对应具体的一个互联网上的主机

  • IP分类:

    • 角度一:IPv4、IPv6

    • 角度二:公网地址、私网地址(或局域网)

  • 使用InetAddress类表示IP地址

    • 实例化:getByName(String host) 、getLocalHost()

    • 常用方法:getHostName() 、getHostAddress()

3. 要素2:端口号

  • 用于区分同一台主机上的不同的进程

  • 不同的进程分配不同的端口号

  • 范围:0-65535

4. 要素3:网络通信协议

  • 这里有两套参考模型

    • OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广

    • TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。

  • 在传输层中涉及到两个协议:TCP、UDP。二者的对比

    • TCP:可靠的连接(发送数据前,需要三次握手、四次挥手),进行大数据量的传输,效率低。

    • UDP:不可靠的连接(发送前,不需要确认对方是否在)、使用数据报传输(限制在64kb以内)、效率高。

  • TCP的三次握手、四次挥手(了解)

5. TCP网络编程

例题1:客户端发送内容给服务端,服务端将内容打印到控制台上。

例题2:客户端发送文件给服务端,服务端将文件保存在本地。

例题3:从客户端发送文件给服务端,服务端保存到本地。并返回“发送成功”给客户端。并关闭相应的连接。

6. UDP网络编程

简单的理解UDP的数据传输。

7. URL编程

  • Java后台:将写好的Java程序部署在Tomcat服务器。启动Tomcat服务器。

  • 前台:使用浏览器进行访问。需要使用url。(HTML+CSS+JavaScript)

  • URL的作用:定位互联网上某一资源的地址。

  • URL的格式:

http://192.168.21.107:8080/examples/abcd.jpg?name=Tom   ---> "万事万物皆对象"
应用层协议 ip地址       端口号  资源地址   参数列表
  • 使用URL实现数据的下载(了解)

二、企业真题

1. TCP协议和UDP协议的区别(华**为)

CP协议:

  • TCP协议进行通信的两个应用进程:客户端、服务端。

  • 使用TCP协议前,须先建立TCP连接,形成基于字节流的传输数据通道

  • 传输前,采用“三次握手”方式,点对点通信,是可靠的

    • TCP协议使用重发机制,当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体确认信息,如果没有收到另一个通信实体确认信息,则会再次重复刚才发送的消息。

  • 在连接中可进行大数据量的传输

  • 传输完毕,需释放已建立的连接,效率低

UDP协议:

  • UDP协议进行通信的两个应用进程:发送端、接收端。

  • 将数据、源、目的封装成数据包(传输的基本单位),不需要建立连接

  • 发送不管对方是否准备好,接收方收到也不确认,不能保证数据的完整性,故是不可靠的

  • 每个数据报的大小限制在64K

  • 发送数据结束时无需释放资源,开销小,通信效率高

  • 适用场景:音频、视频和普通数据的传输。例如视频会议

TCP生活案例:打电话

UDP生活案例:发送短信、发电报

2. 简单说说TCP协议的三次握手与四次挥手机制 (*科软)

2.2 三次握手

TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。

  • 第一次握手,客户端向服务器端发起TCP连接的请求

  • 第二次握手,服务器端发送针对客户端TCP连接请求的确认

  • 第三次握手,客户端发送确认的确认

1、客户端会随机一个初始序列号seq=x,设置SYN=1 ,表示这是SYN握手报文。然后就可以把这个 SYN 报文发送给服务端了,表示向服务端发起连接,之后客户端处于同步已发送状态。

2、服务端收到客户端的 SYN 报文后,也随机一个初始序列号(seq=y),设置ack=x+1,表示收到了客户端的x之前的数据,希望客户端下次发送的数据从x+1开始。 设置 SYN=1 和 ACK=1。表示这是一个SYN握手和ACK确认应答报文。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于同步已接收状态。

3、客户端收到服务端报文后,还要向服务端回应最后一个应答报文,将ACK置为 1 ,表示这是一个应答报文 ack=y+1 ,表示收到了服务器的y之前的数据,希望服务器下次发送的数据从y+1开始。 最后把报文发送给服务端,这次报文可以携带数据,之后客户端处于 连接已建立 状态。服务器收到客户端的应答报文后,也进入连接已建立状态。

完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等。

2.3 四次挥手

TCP协议中,在发送数据结束后,释放连接时需要经过四次挥手。

  • 第一次挥手:客户端向服务器端提出结束连接,让服务器做最后的准备工作。此时,客户端处于半关闭状态,即表示不再向服务器发送数据了,但是还可以接受数据。

  • 第二次挥手:服务器接收到客户端释放连接的请求后,会将最后的数据发给客户端。并告知上层的应用进程不再接收数据。

  • 第三次挥手:服务器发送完数据后,会给客户端发送一个释放连接的报文。那么客户端接收后就知道可以正式释放连接了。

  • 第四次挥手:客户端接收到服务器最后的释放连接报文后,要回复一个彻底断开的报文。这样服务器收到后才会彻底释放连接。这里客户端,发送完最后的报文后,会等待2MSL,因为有可能服务器没有收到最后的报文,那么服务器迟迟没收到,就会再次给客户端发送释放连接的报文,此时客户端在等待时间范围内接收到,会重新发送最后的报文,并重新计时。如果等待2MSL后,没有收到,那么彻底断开。

1、客户端打算断开连接,向服务器发送FIN报文(FIN标记位被设置为1,1表示为FIN,0表示不是),FIN报文中会指定一个序列号,之后客户端进入FIN_WAIT_1状态。也就是客户端发出连接释放报文段(FIN报文),指定序列号seq = u,主动关闭TCP连接,等待服务器的确认。

2、服务器收到连接释放报文段(FIN报文)后,就向客户端发送ACK应答报文,以客户端的FIN报文的序列号 seq+1 作为ACK应答报文段的确认序列号ack = seq+1 = u + 1。接着服务器进入CLOSE_WAIT(等待关闭)状态,此时的TCP处于半关闭状态(下面会说什么是半关闭状态),客户端到服务器的连接释放。客户端收到来自服务器的ACK应答报文段后,进入FIN_WAIT_2状态。

3、服务器也打算断开连接,向客户端发送连接释放(FIN)报文段,之后服务器进入LASK_ACK(最后确认)状态,等待客户端的确认。服务器的连接释放(FIN)报文段的FIN=1,ACK=1,序列号seq=m,确认序列号ack=u+1。

4、客户端收到来自服务器的连接释放(FIN)报文段后,会向服务器发送一个ACK应答报文段,以连接释放(FIN)报文段的确认序号 ack 作为ACK应答报文段的序列号 seq,以连接释放(FIN)报文段的序列号 seq+1作为确认序号ack。

之后客户端进入TIME_WAIT(时间等待)状态,服务器收到ACK应答报文段后,服务器就进入CLOSE(关闭)状态,到此服务器的连接已经完成关闭。客户端处于TIME_WAIT状态时,此时的TCP还未释放掉,需要等待2MSL后,客户端才进入CLOSE状态。

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值