TCP&&UDP&&URL(传输层主要使用的协议)
1.UDP不提供复杂的控制机制,发送数据之前不需要建立连接。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。
2.不是可靠支付。
3.UDP支持一对一,一对多,多对一和多对多的交互通信。
4.UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用有用,如IP电话,实时视频会议等),UDP容易丢帧,但是发送的65507个字节不会被内部分片,可以整块发送,所以在制定协议时不用TCP那么复杂,发送和接收都很容易实现。工程应用中比较受欢迎。
5.TCP协议进行通信的两个应用进程:发送端、接受端
tcp 为什么要三次握手,两次不行吗?为什么?
为了实现可靠数据传输,TCP 协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的。
三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤。
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。
为什么建立连接是三次握手,四次不可以吗
第一次握手:
Client什么都不能确认
Server确认了对方发送正常
第二次握手:
Client确认:自己发送/接收正常,对方发送/接收正常
Server确认:自己接收正常 ,对方发送正常
第三次握手:
Client确认:自己发送/接收正常, 对方发送/接收正常
Server确认:自己发送/接收正常,对方发送/接收正常
为什么TCP连接的时候是3次,关闭的时候却是4次?
因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端
还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经
收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次)。
三次握手四次挥手
三次握手的本质是确认通信双方收发数据的能力
第一次握手
Client将标志位SYN置1,随机产生一个值seq=J,并将数据包发给Server
Client进入SYN_SENT状态,等待Server确认
第二次握手
Server收到数据包后标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置1,
随机产生一个值,并将数据包发给Client确认连接请求,Server进入SYN_RCVD状态
第三次握手
Client收到确认后若ACK为1,则将该数据包发送给Server,Server检查ACK为1则连接建立成功,
Client与Server进入ESTABLISHED状态完成三次握手,可以传输数据
四次挥手的本质是关闭一个连接
第一次挥手:
Clien发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:
Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态。
第三次挥手:
Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:
Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,Server进入CLOSED状态,完成四次握手。
1.TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。TCP可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制。
2.提供可靠的服务TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流。(传输前,采用“三次握手”方式,是可靠的,释放连接采用“四次挥手”方式。)
3.每一条TCP连接只能是点到点的;
4.TCP可以进行大数据量的传输,虽然可靠,但是发送的数据被protocol内部分成了几块,分片发送,所以在用TCP传输的时候,在协议制定上要考虑发送数据连续接收,才能保证一个协议帧的数据正确接收
5.TCP协议进行通信的两个应用进程:客户端、服务端
URI :Uniform Resource Identifier,统一资源标识符;
URL:Uniform Resource Locator,统一资源定位符;
URN:Uniform Resource Name,统一资源名称。
URI 可以分为 URL, URN,或同时具备locators 和names特性的一个东西。URN作用就好像一个人的名字,URL就像一个人的地址。换句话说:URN确定了东西的身份,URL提供了找到它的方式(URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。)。
GET和POST区别
Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
但是这种做法也不时绝对的,大部分人的做法也是按照上面的说法来的,但是也可以在get请求加上
request body,给 post请求带上 URL 参数。
Get请求提交的url中的数据最多只能是2048字节(有限制),这个限制是浏览器或者服务器给添加的,http协议并
没有对url长度进行限制,目的是为了保证服务器和浏览器能够正常运行,防止有人恶意发送请求。Post
请求则没有大小限制。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
Get执行效率却比Post方法好。Get是form提交的默认方法。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
什么是cookie
cookie是由Web服务器保存在用户浏览器上的小文件(key-value格式),包含用户相关的信息。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户身份。
什么是session
session是依赖Cookie实现的。session是服务器端对象
session 是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置 sessionid,浏览器在向服务器请求过程中传输 cookie 包含 sessionid ,服务器根据 sessionid 获取出会话中存储的信息,然后确定会话的身份信息。
cookie与session区别
存储位置与安全性:cookie数据存放在客户端上,安全性较差,session数据放在服务器上,安全性相对更高;
存储空间:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,session无此限制
占用服务器资源:session一定时间内保存在服务器上,当访问增多,占用服务器性能,考虑到服务器性能方面,应当使用cookie。
JavaWeb知识点:
四大作用域
PageContext;
ServletRequest;
HttpSession;
ServletContext;
四个域对象
pageContext、request、session、application