1.TCP/IP网络协议以及各层协议
应用层: FTP, SMTP, DNS, HTTP, Telnet(远程网络访问协议)
传输层:TCP, UDP
网络层:IP, ARP, RARP, ICMP(控制报文协议)
网络接口层:各种通信网络接口(以太网等)
2. 简述IP地址的分类
IP地址分为网络号和主机号, A类地址的前8位是网络地址,B类地址的前16位是网络地址,C类地址的前24位是网络地址。
A类地址: 1.0.0.0~126.0.0.0
B类地址:128.0.0.0 ~ 191.255.255.255
C类地址:192.0.0.0 ~ 223.255.255.255
D类地址:224.0.0.0 ~ 239.255.255.255 (作为多播使用)
E类地址:保留
A,B,C是基本类,D、E类作为多播和保留使用。主机号,全0的是网络号,主机号全1的是广播地址。
3. TCP 和 UDP的区别
TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输
TCP传输单位成为TCP报文段,UDP传输单位成为用户数据包
TCP注重数据安全性,UDP数据传输快,因为不需要连接等待
TCP是面向字节流,UDP面向报文
TCP是点对点连接,UDP一对一,一对多,多对多都可以
TCP适合用于网页,邮件等,UDP适合用于视频,语音广播等
TCP对应的协议:
FTP:定义了文件传输协议,使用21端口
Telnet:一种用于远程登录的端口,使用23端口,用户可以以自己的身份连接到远程的计算机上。
SMTP:邮件传送协议,用于发送邮件。服务器开放的是25端口
POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
HTTP :是从Web服务器传输超文本到本地浏览器的传送协议
UDP对应的协议:
DNS协议:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
SNMP:简单网络管理协议,使用161号端口,使用来管理网络设备
TFTP :简单文件传输协议,该协议是在熟知的端口69上使用UDP服务。
4. 简述ARP地址解析协议工作原理
首先, 每个主机会在自己的ARP缓冲区简历一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
当源主机要发送数据时,首先检查自己的ARP列表中是否有对应的目的主机的MAC地址,如果有就直接发送数据,如果没有,就向本网段的所有的主机发送ARP数据包, 该数据包括的内容由:源主机IP地址,源主机的MAC地址,目的主机的IP地址
当本网络的所有主机收到ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址中放入到ARP响应包中,告诉源主机自己是它想找的MAC地址。
源主机接收到ARP响应包后,将目的主机的IP和MAC地址写入到ARP列表,并利用此消息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
广播发送ARP请求,单播发送ARP响应。
5.简述ICMP、TFTP、HTTP、NAT、DHCP协议
ICMP : 因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息
TFTP:是TCP/IP协议族中的一个用来在客户机和服务器之间进行简单的文件传输的协议,提供不复杂、开销不大的文件传输服务
HTTP:超文本传输层协议,是一个属于应用层的面向对象的协议
NAT协议:网络地址转换接入广域网(WAN)技术,是一种将私有地址转换为合法IP地址的转换技术
DHCP协议:动态主机配置协议,使用UDP协议工作。给内部的网络和网络服务供应商自动的分配IP地址。
RARP是逆地址解析协议,作用是完成从硬件地址到IP地址的映射,RARP只能用于具有广播能力的网络。封装一个RARP的数据包里面有MAC地址, 然后广播到网络上,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入到响应报文中发送给请求者。
一些常见的端口号及其用途:
TCP 21端口 : FTP 文件传输服务
TCP 23 端口:TELNET 终端仿真服务
TCP 25端口:SMTP简单邮件传输服务
UDP 53端口:DNS域名解析服务
TCP 80端口:HTTP超文本传输服务
TCP 109端口:POP2邮局协议2
TCP 110端口 : POP3邮局协议版本3使用的端口
UDP 69 端口:TFTP 简单文件传输协议
3306:Mysql端口号
6. socket通信简介
socket()的基本操作: socket(), bind(), listen(), connect(), accept(), read(), write(), close()
accept()提取出所监听套接字的等待连接队列中的第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符。
网络层的ip地址可以唯一的标识网络中的主机,而传输层的协议加端口可以唯一的标识主机中的应用程序。这样可以利用三元组(ip地址,协议, 端口)来标识网络中的进程。
int socket(int domain, int type, int protocol) ,domain协议族, type:制定socket类型,常见的socket类型有,socket_stream, socket_dgram....protocol:就是指定的协议。
int bind(int sockfd, const struct sockaddr* addr, socklen_t addrlen); 函数的三个参数为套接字描述符,
struct sockaddr_in{ sa_family_t sin_family; //address family : AF_INET in_port_t sin_port; // port in network byte order
struct in_addr sin_addr // internet address};
int listen(int sockfd, int backlog); //第一个参数为要监听的socket描述字,第二个参数为相应socket可以排队的最大连接个数。
connect(int sockfd, const struct sockaddr *addr, sockleng_t addrlen); //第一个参数为客户端的套接字描述符, 第二个参数为服务器的socket地址,第三个参数为socket地址长度。客户端通过调用connect函数来建立与tcp服务器的连接。
int close(int fd); //close操作只是把相应的套接字描述符引用计数减1,只有当引用计数为0的时候,才会触发TCP客户端向服务器发送终止连接请求。
客户端调用connect时, 触发了连接请求, 向服务器发送了SYN J 包, 这时connect进入阻塞状态;服务器监听到连接请求, 调用accept函数请求向客户端发送SYN K, ACK J + 1, 这时accept进入阻塞状态;客户端收到服务器的SYN K, ACK J + 1之后,这个时候connect返回, 并对SYN K 进行确认;服务器收到ACK K + 1时, accept返回, 至此三次握手完毕,连接建立。客户端的connect在三次握手的第二次返回, 而服务端的accept在三次握手的第三次返回。
7、为什么需要四次挥手?
原因是tcp是全双工模式,接收到FIN时意味着没有数据再发来, 但是还可以继续发送数据。
8、拥塞控制、流量控制、快重传、快启动
计算机网络中的带宽、交换节点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中的一部分资源的需求超过了该资源所能提供的可用部分、网络的性能就会变坏,这种情况就叫做拥塞。拥塞控制就是防止过多的数据注入网络中,这样就可以使网络中的路由表或者链路不至于过载。拥塞控制是一个全局性的过程,和流量控制不同,流量控制是点对点通信量机制。
发送方维持一个叫做拥塞窗口的cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态的在变化。在发送数据时,将拥塞窗口的大小与接收端的ACK窗口大小做比较,取较小者作为发送数量的上限。
慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说从小打到逐渐增加拥塞窗口的大小。为了防止cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量。当cwnd < ssthresh, 使用慢开始算法, 当cwnd > ssthresh时, 改用拥塞避免算法。拥塞避免就是:当拥塞窗口cwnd达到一个阈值时,窗口大小不再呈指数上升,而是以线性上升, 避免增长过快导致网络拥塞。拥塞发生:当发生丢包进行数据包重传时,表示网络已经拥塞。这时新的阈值等于cwnd/2, cwnd = 1. 快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方知道有报文没有达到对方)而不要等待自己发送时捎带确认。快重传算法规定,发送方只要一连收到三个重复的确认就应该立即重传对方尚未接收到的报文段,而不必继续等待设置的重传计时时间到期。快速重传配合使用的有快速恢复算法:当发送方连续收到三个重复确认时,就执行乘法减小算法,把ssthresh门限减半;此时不执行慢启动算法,而是把cwnd设置为ssthresh的一般,然后执行拥塞避免算法,使拥塞窗口缓慢增大。
流量控制:如果发送发把数据发送的太快,接收方可能会来不及接收,这样会造成数据的丢失。TCP的流量控制是利用滑动窗口机制实现的,接收方在返回的ACK中包含自己的接收窗口的大小,以控制发送方的数据发送。
当某个ACK报文丢失了,就会出现A等待B确认,并且B等待A发送数据的死锁状态。为了解决这个问题,TCP引入了持续计时器。当A收到rwnd=0时,就启用该计时器,时间到了则发送一个字节的探测报文,询问B是很忙还是上个ACK丢失了,然后B回应自身接收窗口的大小,返回仍为0或者会重发rwnd=x。
9. 在浏览器输入一个URL按下回车后,其流程是?
进行寻址:若浏览器缓存中有URL对应的IP,则直接查询IP;否则访问DNS进行寻址
DNS或者URL Cache返回网页服务器的IP地址
浏览器与网页服务器进行三次握手建立TCP连接
浏览器与服务器建立HTTP会话,接收来自服务器的HTTP数据。
浏览器解析HTTP数据,在本地窗口渲染并显示网页。
当浏览器页面被关闭时,终止HTTP会话并关闭连接。
10. RTT(往返时间) 和 RPC
RTT由三个部分决定:链路的传播时间,末端系统的处理时间。路由器的缓存中的排队和处理时间。
11. HTTP协议的主要特点
支持客户/服务器模式 ; 简单快速:客户向服务器请求服务时,只需要传送请求方法和路径。请求方法常用的有GET、HEAD、POST。 灵活 : HTTP允许传输任意类型的数据对象 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,收到客户的应答后,即断开连接。无状态:http是无协议状态,无状态意思是协议对于事务处理没有记忆能力。缺少状态意味着如果后序处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。HTTP1.1支持持续连接
12 HTTP协议之URL
格式 http:://host[":"port][abs_path]
http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者是IP地址;port指定一个端口号,为空的话则使用默认缺醒设置80;abs_path指定请求资源的URI;如果URI中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器帮我们自动完成。
13HTTP协议之请求篇
http请求由三部分组成,分别是:请求行、消息报头、请求正文
请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。格式为:Method Request-URI HTTP-Version CRLF, 其中Method表示请求方法;Request-URI是一个统一资源定位符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行。
请求方法:
GET 请求获取Request_URI所标识的资源
POST 在Resuest_URI所标识的资源中附加新的数据
HEAD 请求获取由Request_URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request_URI作为其标识
DELETE 请求服务器删除Request_URI所标识的资源
TRACE 请求服务器回送到的请求消息,用于测试和诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能, 或者查询与资源相关的选项和需求
14 HTTP协议之响应
1XX : 指示信息-表示请求已接收,继续处理
2XX : 表示请求已被成功接收、理解和接收
3XX : 重定向--要完成请求必须进行更进一步的操作
4XX : 客户端错误--请求有语法错误或请求无法实现
5XX : 服务端错误--服务端未能实现合法的请求。
常见的状态码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request // 客户端有语法错误,不能被服务器所理解
401 Unauthorized // 请求未经授权
402 Forbidden //服务器收到请求,但是拒绝提供服务
404 not find //请求资源不存在
500 Internet Server Error //服务器发生不可预期的错误
503 Server Unvailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
15. HTTP 1.0, 1.1, 2.0的区别
HTTP1.1默认支持长连接, HTTP1.1节省带宽,默认只发送header,如果服务器认为客户端有权限进行连接请求服务器,则返回100, 否则返回401.如果客户端接收到100, 就把body传递给服务器。
HTTP1.1有host域
HTTP 2. 0多路复用(一个连接可以处理多个请求)
HTTP2.0 支持header压缩,在网络上传输会更快
我们对HTTP2.0的服务器进行请求数据的时候, 服务器会顺便把一些客户端需要的资源一起推送到客户端,避免客户端再次创建连接发送请求到服务器获取