最全的计算机程序网络基础 ——网络编程

  写这篇博客的原因很简单,面试回答时断断续续,自己都懂,却因为语言组织不够严谨,结果差强人意。下来后,发愤图强,一定要记住,特此,奉献给哪些心里都明白,嘴上说不出的同道中人以及新人小白。网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层

 

1. http和https的关系?

HTTP(超文本传输协议)被用于在Web浏览器和网站服务器之间,以明文方式传递信息,不提供任何方式的数据加密,因此使用HTTP协议传输隐私信息(如:银行卡号、密码等支付信息)非常不安全。

为了解决这一安全缺陷,网景公司设计了SSL(Secure Sockets Layer)协议,在HTTP的基础上加入了SSL(Secure Sockets Layer)协议,SSL依靠SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。从而诞生了HTTPS(安全套接字层超文本传输协议)。

简单来说,HTTPS协议="SSL+HTTP协议"构建的可进行加密传输、身份认证的网络协议,是HTTP的安全版。

2. http、Tcp/ip、socket的关系?

通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。

3. Tcp/ip和socket的关系?

 “TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”

4. http和Tcp/ip的关系?

“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”

5. 了解session?

HTTP 协议里是没有关于 Session 会话的定义,Session 是各种编程语言根据 HTTP 协议的无状态这种特点而产生的。其实现无非就是服务器端的一个哈希表,哈希表的Key就是传递给浏览器的名为 jsessionid 的 Cookie 值。

6. cookie和session的关系?

(1)客户端向服务器发送请求,服务器记录状态(生成cookie)

(2)服务器在响应报文中通过set-Cookie字段,在浏览器端生成cookie

(3)当客户端继续发送请求的时候,带有该域名下的cookie发送过去

(4)服务端发现客户端发送过来的请求的时候,回去检查是哪个客户端发送过来的请求,然后对比服务器上的记录,得到之前的那个信息

7. Tcp和Udp的关系?

TCP协议是面向连接,保证高可靠性(数据无丢失,数据无失序,数据无错误,数据无重复达到)传输层协议

UDP:数据丢失,无秩序的传输层协议(qq基于udp协议)

(1).TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。

(2).也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。

知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。

8. 利用Socket建立网络连接的步骤

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

(1).服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

(2).客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

(3).连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

9. 什么是TCP连接的三次握手

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

  握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开)

10. HTTP链接的特点

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

11. 在视频电话通信中往往使用UDP协议,为什么?

由于UDP的速度快,所以适合于在线视频媒体,电话视频聊天,qq聊天,电视广播,多人在线游戏这些项目。首先,QQ并不是完全基于UDP实现。比如在使用QQ进行文件传输等活动的时候,就会使用TCP作为可靠传输的保证。

使用UDP进行交互通信的好处在于,延迟较短,对数据丢失的处理比较简单。

同时,TCP是一个全双工协议,需要建立连接,所以网络开销也会相对大。如果使用QQ语音和QQ视频的话,UDP的优势就更为突出了,首先延迟较小。最重要的一点是不可靠传输,这意味着如果数据丢失的话,不会有重传。因为用户一般来说可以接受图像稍微模糊一点,声音稍微不清晰一点,但是如果在几秒钟以后再出现之前丢失的画面和声音,这恐怕是很难接受的。

 

UDP协议是无连接方式的协议,它的效率高,速度快(因为没有繁琐的握手机制与挥手机制),占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。并且如今网络物理介质的高速提升(光纤)降低了数据丢包的机率,并且当网络状况很好的情况下,UDP的缺点又可以很好的大程度上的被改善。因此UDP协议发展前途无量。

 

TCP和UDP都是传输层协议,QQ的消息为应用层内容,需要通过传输协议封装传输。

TCP为可靠的面向连接协议,建立TCP连接需要两端三次握手协商(双方在线)。

UDP为不可靠的无连接协议,数据传输出去,无需连接两端,确认是否到达(对端可以不在线)。

QQ采用UDP协议提高了消息传输的效率,无需两端建立连接,即使对端不在线也能传输消息。

12.Session和Cookie,以及http有状态

状态保持

浏览器请求服务器是无状态的。无状态指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。无状态的应用层面的原因是:浏览器和服务器之间的通信都遵守HTTP协议。根本原因是:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。

有时需要保存下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等。实现状态保持主要有两种方式:

在客户端存储信息使用Cookie

在服务端存储信息使用Session

计算机密集型:CPU 长时间满负荷运行, 如图像处理、大数据运算、圆周率计算等

I/O密集型:网络 IO, 文件 IO, 设备 IO 等

在unix(linux)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已。在信息交换的过程中,我们都是对这些流进行数据的收发操作,简称为I/O操作

阻塞、非阻塞、多路IO复用,都是同步IO,异步必定是非阻塞的

IO多路复用:正因为阻塞I/O只能阻塞一个I/O操作,而I/O复用模型能够阻塞多个I/O操作,所以才叫做多路复用

13.网络编程:使用编程语言实现多台计算机的通信。

网络编程三大要素。

  (1)IP地址:网络中每一台计算机的唯一标识,通过IP地址找到指定的计算机。

  (2)端口:用于标识进程的逻辑地址,通过端口找到指定进程。

  (3)协议:定义通信规则,符合协议则可以通信,不符合不能通信。

14.HTTP协议采用了请求/响应模型。

HTTP请求报文由3部分组成(请求行+请求头+请求体)

HTTP的头域包括通用头,请求头,响应头和实体头四个部分

详细请了解:https://blog.csdn.net/heyue_99/article/details/74689057

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值