网络编程是很重要的内容,所以在这个博客里,把笔试中有关网络编程的点都记录一下
1.iso7层模型
简要概述
应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
1.应用层(数据单元为报文)
常见协议 :http ftp dns www smtp
其中以http为例
建立tcp连接,浏览器向服务器发送请求指令,浏览器向服务器发送请求信息,服务器应答,服务器发送应答头信息,服务器向浏览器发送数据,服务器关闭tcp连接
ftp :文件交互式协议
域名系统:DNS 实现网络设备名字到ip地址映射的动作
邮件传输协议:SMTP
网络管理协议:SMNP
2.表示层(报文)
负责数据的转换,将下一层的数据转化为上层能够处理的数据
3.会话层 (报文)
通信管理,负责建立和断开通信连接。
4,传输层(数据段)
负责节点之间的数据传输,其中最常见的两个协议为tcp和udp。
tcp协议简介:面向连接的,传输可靠的,速率慢,以字节流的形式传递,适合需要通信可靠的场合。
udp协议简介:面向无连接的,传输不可靠,应用在传输速度要求高的场合,所需资源少。
5.网络层(数据包)
选择合适的网间路由和交换节点
负责端到端之间的传输,网络层的协议有icmp,ip,rip,igrp,arr,rarp
Ip为主机提供一种不可靠的,无连接的数据传输方式
arp协议,通过查找ip地址从而得出对应的mac地址,发送路由器对应端口的mac地址。
6.数据链路层(数据帧) 网桥和交换机(全双工)将网络层拿下来的数据组装成帧,
7.物理层(比特)
2.网络编程中设计并发服务器,多进程和多线程的区别
1.子进程是父进程的复制品,子进程获得了父进程的数据空间,堆和栈的复制品
2.线程与同进程的其他线程共享数据,但是拥有自己的栈空间,拥有独立的执行序列。
3.线程执行开销小,但是不利于资源的保护,进程则相反,
总结,每个进程拥有自己的地址空间,而线程则是共享地址空间,其他的区别都是由此而来。
3.简述tcp/ip网络层
实现数据交换 实现路由器与主机,主机与主机,主机与路由器之间的数据交换(传数据段)
协议
ip协议:无连接,不可靠,尽力而为的数据报传输模式 ip数据报的首部为ipv4或ipv6的版本,是ip协议的主要体现
ARP协议:在ip数据报中加上目的mac地址
icmp协议:对于差错,异常发送的报文
ICMP差错报告报文:终点不可达,源点抑制,时间超过,参数问题,改变路由
(装入ip数据报文中)
ICMP询问报告报文:回送请求和回答报文,时间戳请求和回答报文,掩码地址请求和回答报文,路由器询问和通告报文
DHCP协议:请求获得目的地ip地址
网络层连接:两台主机之间
传输层连接:两个应用进程之间
4.介绍一下网络协议 RTP,RTCP,RTSP,SIP.,并描述一下icmp的作用
1.rtp协议实现多媒体数据传输 RTCP实现多媒体数据传输可靠,是一种实时传输的控制协议,rtsp,是一种实时传输的流协议,用来控制声音或影像的多媒体串流协议
2.因为传输的数据量大,且交互量大,所以不用传统的tcp/ip而是用rtp协议
TCP重传机制
TCP拥塞控制机制
TCP报文头比UDP保文头要大
TCP的启动速度慢
icmp的作用:
ICMP协议是TCP/IP协议的一个子协议。用在IP主机、路由器之间传递控制消息,控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
这些控制消息虽然不传递用户数据,但是对于用户数据的传输起着重要的作用
3.总而言之,RTSP发起/终结流媒体之后,再通过RTP协议传输流媒体数据 ,RTCP对RTP进行控制,同步。既然叫协议就要满足各自的标准,比如各自协议里面的头、参数、步骤(比如RTP步骤包含tcp/udp协议),每一层都有自己的封装,然后发送出去,接收方按照各自协议解析出来
5.什么是mac地址
网卡的物理地址 数据链路层地址
6.ipv6的地址长度
128位,ipv4的地址长度为32位
7.IPsec是网络层的协议
IPSec是IPv6的组成部分,也是IPv4的可选扩展协议
每个IP分组的内容先加密在传输,即便中途被截获,攻击者由于缺乏解密数据包所必要的密钥而无法获取其中内容。
8.udp是怎么样的传输协议
udp是无连接,不可靠的传输协议
tcp是以字节流的形式将数据分割成组发出去,再到另一端将其重组起来,而udp是以数据包的形式将数据发送出去,不考虑对面能不能收到
tcp相当于两根管道,数据是一个字节一个字节的进行传输
TCP传输中有两个重要标志,SYN,ACK
TCP连接是全双工协议。先关闭读通道,再关闭写通道,因为tcp是全双工的,客户端发送一个fin信号,服务器端收到后,会发送一个ack应答,这时候客户端是不可以读的,但是任然可以发送数据,客户端收到ack信号会,会
流量控制,堵塞控制是tcp独有的,各端会分配缓冲区大小
拥塞窗口,防止网络流量过大
9.http
1.get和post的区别
post在建立tcp连接后,会先把头部数据发送给服务器,然后等待服务器响应一会,再发送数据
get是在建立tcp连接后,把头部数据和数据一起发送给服务器,所以get会比post快
2.get会将数据缓存起来,而post不会
3.get只支持url编码,post支持多种格式
4.get的请求会放在url之后,参数直接放在url里面的,存在安全问题,而post的参数是放在请求主体(httpbody)里面,参数不会被保留
第一种:直接在URL后面加参数:
localhost:21811/Handler1.ashx?id=1&name=“abc”;(url参数)安全性能低,
post传递:直接放在httpbody中,数据类型由content-type决定
但是get方法请求的长度是有限制的,浏览器对url字符有限制
post的请求可以用于修改服务器数据
重点:对于get方法,客户端会把请求报文和数据一起发送出去,服务器收到以后,响应200
对于post方法,客户端会先发请求报文,服务器收到后,响应100,之后客户端再发送数据,
5.http和httpS的区别
https在客户端与服务器建立tcp连接后,还会进行ssl协商(一种加密数据传输协议),之后在数据传输的过程中采样对称加密传输,这种传输的密匙在ssl协商时就已经协商好了。
6.http几个重要的状态码
1xx 表示请求正在处理
2xx 表示请求已经被成功处理完毕
http头部组成,通用头,请求头,响应头,实体头
通用头:客户端,服务器都可以用
请求头:请求报文独有的,客户端想接收什么信息
响应头:告诉客户端在于哪种服务器交互信息
实体头:content_type,告诉主体部分的数据类型
http头部和正文用/r空行分隔开来
Keepalive 和非keepalive的区别(持久连接和非持久连接)
非keepalive占用服务器开销很大?每次进行一次open/close都要给tcp分配变量和缓冲区
那keeplive有没有缺点呢,肯定是有的,比如说keeplive会长期占用系统资源
长连接,短连接的应用场景
长连接:客户端连接较少的场景,游戏
短连接:京东,淘宝
如何知道http报文的大小
小消息:通过响应报文内的content-length
大消息:使用 Transfer-Encoding:chunked 字段,不传输数据长度,客户端只知道是分组组装,这里拿牛客网的图
如果服务器知道客户端发送的数据大小,那么它就会在响应信息中有个content-length,如果不知道,则分段发送。Chunked transfer encoding
http和https的区别
1.安全性,http数据不加密,https的数据在传输过程中是加密的,对称加密和非对陈加密
2.连接方式不一样,端口不一样
3.https除了要使用到3次握手外,还要用到一个SSL的协商过程。(SSL加密传输)
10.局域网由什么组成
服务器,工作站,连接设备,传输介质,通信协议
11.ip地址的组成
网络号,主机号
子网掩码把一个网络划分成多个网络,a类,b类,c类,
32位,通过不同的主机号来识别。
8.29
iso7层模型和tcp/ip模型的区别
个人来说,tcp/ip采用应用层,传输层,网络层,数据链路层,物理层 总的来说就是将表示层和会话层整合在一起。
数据链路层的作用:两台主机之间的数据传输,总是在一段一段的链路上传递的,将网络层传下来的ip数据组装成帧,