Java计算机网络

TCP/IP四层网络模型

  • TCP/IP协议族体系结构以及主要协议
    TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。
  • 数据链路层
    数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介(比如以太网、令牌环等)上的传输。
    数据链路层两个常用的协议是ARP协议(Address Resolve Protocol,地址解析协议)和RARP协议(ReverseAddress Resolve Protocol,逆地址解析协议)
    。它们实现了IP地址和机器物理地址(通常是MAC地址,以太网、令牌环和802.11无线网络都使用MAC地址)之间的相互转换。
  • 网络层
    网络层实现数据包的选路和转发。
    网络层最核心的协议是IP协议(Internet Protocol,因特网协议)。IP协议根据数据包的目的IP地址来决定如何投递它。如果数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳(next hop)路由器,并将数据包交付给该路由器来转发。多次重复这一过程,数据包最终到达目标主机,或者由于发送失败而被丢弃。可见,IP协议使用逐跳(hop by hop)的方式确定通信路径。
    网络层另外一个重要的协议是ICMP协议(Internet Control Message Protocol,因特网控制报文协议)。它是IP协议的重要补充,主要用于检测网络连接。
  • 传输层 TCP协议、UDP协议。
    传输层为两台主机上的应用程序提供端到端(end to end)的通信。与网络层使用的逐跳通信方式不同,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。
  • 应用层
    应用层负责处理应用程序的逻辑
    ping是应用程序,而不是协议,前面说过它利用ICMP报文检测网络连接,是调试网络环境的必备工具。
    telnet协议是一种远程登录协议,它使我们能在本地完成远程任务。
    OSPF(Open Shortest Path First,开放最短路径优先)协议是一种动态路由更新协议,用于路由器之间的通信,以告知对方各自的路由信息。
    DNS(Domain Name Service,域名服务)协议提供机器域名到IP地址的转换。

OSI七层网络模型

OSI七层模型

功能

对应的网络协议

应用层

应用层是网络体系中最高的一层,也是唯一面向用户的一层,也可视为为用户提供常用的应用程序,每个网络应用都对应着不同的协议

HTTP、TFTP, FTP, NFS, WAIS、SMTP

表示层

主要负责数据格式的转换,确保一个系统的应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解析,管理数据的解密和加密,同时也对应用层的协议进行翻译

Telnet, Rlogin, SNMP, Gopher

会话层

负责网络中两节点的建立,在数据传输中维护计算机网络中两台计算机之间的通信连接,并决定何时终止通信

SMTP, DNS

传输层

是整个网络关键的部分,是实现两个用户进程间端到端的可靠通信,处理数据包的错误等传输问题。是向下通信服务最高层,向上用户功能最底层。即向网络层提供服务,向会话层提供独立于网络层的传送服务和可靠的透明数据传输。

TCP, UDP

网络层

进行逻辑地址寻址,实现不同网络之间的路径选择,IP就在网络层

IP, ICMP, ARP, RARP, AKP, UUCP

数据链路层

物理地址(MAC地址),网络设备的唯一身份标识。建立逻辑连接、进行硬件地址寻址,相邻的两个设备间的互相通信

FDDI, Ethernet, Arpanet, PDN, SLIP, PPP,STP。HDLC,SDLC,帧中继

物理层

七层模型中的最底层,主要是物理介质传输媒介(网线或者是无线),在不同设备中传输比特,将0/1信号与电信号或者光信号互相转化

IEEE 802.1A, IEEE 802.2到IEEE 802

简述 TCP 和 UDP 的区别

  • TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
  • TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
  • UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
  • TCP对系统资源要求较多,UDP对系统资源要求较少。

TCP 特点

1.基于链接,点对点传输,在传输数据前要先建立好连接,再进行传输。
2.一旦建立连接就可以是双向通信
3.传输是基于字节流而不是报文,将数据根据大小进行变好,接收端通过 ack 大小进行编号,从而保证接收数据的有序性和完整性。
4.TCP 还可提供流量控制能力,通过滑动窗口来控制数据的发送速率,滑动窗口的本质就是动态缓冲区
5.通过慢启动,拥塞避免,拥塞发生,快速恢复四个算法实现了拥塞控制

使用TCP 和 UDP如何选择?

  • 什么时候应该使用TCP
    当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP、Putty,用的Telnet、SSH QQ文件传输。
  • 什么时候应该使用UDP:
    当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP。

TCP 三次握手和四次挥手(重点)

三次握手目的:创建连接

java 解析sdp协议_网络协议

  • 第一次握手:
    一开始都是close状态,客户端主动打开,服务端进入listen监听状态,等待请求,客户端发出连接请求报文(SYN包),报文头为SYN,seq为任意正整数x,此时进入同步发送状态(SYN_SEND),等待服务器确认。
  • 第二次握手
    如果服务端同意接收信息,会发出确认报文(SYN+ACK包),报文头seq为另外一个正整数y,ack为x+1,服务端进入同步收到的状(SYN_RCVD);前两步都不携带数据,都需要消耗一个序列号
  • 第三次握手:
    客户端接收到确认报文(SYN+ACK包 ),进入ESTABLISHED状态,还要向服务端给出确认,发出确认报文(ACK包ack=y+1 ),两端都进入ESTABLISHED状态,完成三次握手。 此后,双方就建立了链接,可以开始通信了。

为什么需要三次握手?

  • 简单说就是: 为了双方确认自己与对方的发送与接收是正常的。两次握手的话至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认,不能建立起双向通信。
  • 为了初始化Sequence Number (序列号)的初始值: 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。

TCP四次挥手(重点)

目的:为了中止连接

java 解析sdp协议_网络协议_02

  • 第一次挥手:
    最开始两方都处于ESTABLISHED状态,客户端主动关闭,发出连接释放报文(FIN)并且停止发送数据,报文头:FIN和seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),然后进入FINWAIT1状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
  • 第二次挥手:
    服务器收到报文,发出确认报文(ACK,ack=u+1,序列号seq=v),进入CLOSEWAIT状态。CLOSEWAIT状态:半关闭状态,服务器端不接收数据但可能还要发送数据。
  • 第三次挥手:
    客户端收到报文进入FINWAIT2状态,等待服务器发送第三次挥手,这段时间可以接收数据。服务端数据发送完后,会发送释放报文(FIN),但服务器很可能又发送了一些数据,序列号会变化,假定此时的序列号为seq=w,此时进入LASTACK状态。
  • 第四次挥手:
    客户端收到报文后必须发送确认报文(ACK,ack=w+1,seq=u+1),进入TIMEWAIT,但连接没有释放,等待2MSL(2倍最大报文段寿命)来保证连接的可靠关闭才进入CLOSED状态。服务端收到确认直接进入CLOSED状态。

为什么连接的时候是三次握手,关闭的时候却是四次挥手?

因为在连接时当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,因为可能还有数据需要传输回去,并不能立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了,但我还有一些数据没有发完”。只有等到我Server端所有的报文都发送完了,才会发送FIN报文,因此不能一起发送。所以需要四步握手。

UDP的特点

面向非连接 不维护连接状态,支持同时向多个客户端传输相同的消息 数据包报头只有8个字节,额外开销较小 吞吐量只受限于数据生成速率、传输速率以及机器性能 尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表 面向报文,不对应用程序提交的报文信息进行拆分或者合并。

在浏览器中输入url地址 ->> 显示主页的过程

总体来说分为以下几个过程:

1.DNS解析,查询服务器缓存,解析url,找到服务器的IP地址
2.TCP连接, 三次握手
3.发送HTTP请求
4.服务器处理请求并返回HTTP报文
5.浏览器解析渲染页面
6.连接结束,四次挥手

HTTP状态码

1xx :指示信息–表示请求已接收,继续处理
2xx :成功–表示请求已被成功接收、理解、接受
3xx :重定向–要完成请求必须进行更进一步的操作
4xx :客户端错误–请求有语法错误或请求无法实现
5xx :服务器端错误–服务器未能实现合法的请求

get 和 post 请求有哪些区别?

1. GET在浏览器回退时是无害的,而POST会再次提交请求。
2. GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
3. GET请求只能进行url编码,而POST支持多种编码方式。
4. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
5. GET请求在URL中传送的参数是有长度限制的,而POST没有。
6. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
7. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
8. GET参数通过URL传递,POST放在Request body中。

Cookie ,Session区别?

Cookie数据存放在客户的浏览器上, Session数据放在服务器上 Session相对于Cookie更安全 若考虑减轻服务器负担,应当使用Cookie。

HTTPS

S:Security https增加了一个SSL层
SSL(Security Sockets Layer ,安全套接层) 为网络通信提供安全及数据完整性的一-种安全协议 是操作系统对外的API , SSL3.0后更名为TLS 采用身份验证和数据加密保证网络通信的安全和数据的完整性

HTTP和HTTPS的区别

  • HTTPS需要到CA申请证书, HTTP不需要
  • HTTPS密文传输, HTTP明文传输
  • 连接方式不同, HTTPS默认使用443端口, HTTP使用80端口
  • HTTPS=HTTP+加密+认证+完整性保护,较HTTP安全

Socket

Socket是对TCP/IP协议的抽象,是操作系统对外开放的接口