计算机网络

参考文档
《自顶向下方法》
待阅读

(一)计算机网络和因特网

什么是因特网
  1. 具体构成描述:因特网是一个世纪范围内的计算机网络,互联了数以亿计的计算机设备(主机,或称为端系统).
  • 端系统通过通信链路(同轴电缆,铜线,光纤)和分组交换机(路由器,链路层交换机)连接,发送信息的端系统将报文数据分段,并加上首部字节,形成分组(包).
  • 端系统通过ISP(因特网服务商)接入网络,每个ISP是一个由多个分组交换机和多段通信链路组成的网络.
  • 端系统、交换机及其他因特网部件都要运行一系列协议. 因特网的主要协议统称为TCP/IP(IP协议定义了路由器和端之间收发分组的格式).
  • RFC(请求评论)是IETF(因特网工程任务组)研发,定义了TCP,IP,HTTP,SMTP等协议.
  1. 服务描述:因特网是应用程序的平台.
  • 端提供了一个API(应用程序编程接口),其是一套发送数据的软件必须遵循的规则集合,因此因特网能够将数据交付给目的地.
网络边缘
  1. 接入网:将端连接到离其最近的路由器的物理链路.
  • 家庭接入:DSL(数字用户线),FTTH(光纤到户),电缆,HFC(混合光纤同轴),拨号,卫星.
  • 企业接入:以太网,WiFi.
  • 广域无线接入:3G,LTE.
  1. 物理媒体:双绞铜线,同轴电缆,光纤,陆地无线电信道,卫星无线电信道.
网络核心
  1. 分组交换(另一种数据传输方式是电路交换:端系统通信期间始终占用带宽):端将报文分成分组 ,通过交换机和链路传递.
  2. 存储转发:交换机必须接受到整个分组,才开始传输.
  3. 排队时延:若分组需要传输到某条链路,而该链路正忙,则其必须在输出缓存中等待.
  4. 分组丢失:缓存空间有限,若其充满则会丢包.
  5. 转发表:分组到达路由器时,路由器读取其首部中目的地的IP地址,并在转发表(转发表由路由器自动地设置)搜索,之后决定从哪条链路输出.
  6. 因特网是网络的网络,由十多个第一层ISP和数十万个低层ISP组成. 低层ISP(用户,内容提供商)和高层ISP,高层ISP彼此互连. 内容提供商也可创建网络,在可能的地方与用户直接互联,以减少费用.
时延,丢包和吞吐量
  1. 时延分为:处理,排队,传输和传播时延.
  2. 传输时延:路由器将分组推出所需的时间,是分组长度和链路传输速率的函数,与路由器之间的距离无关.
  3. 传播时延:1个比特从一台路由器向另一台传播所需的时间,是亮路由器间距离的函数,与分组长度和链路传输速率无关.
  4. 设计系统时流量强度 La/R 不能大于1. 接近于1时将会丢包.
    注:a 是分组到达队列的平均速率;R 是从队列中推出比特的速率(传输速率);假定所有分组都是由 L 比特组成.
  5. 瞬时吞吐量:主机B接收到该文件的速率.
  6. 平均吞吐量:文件比特数/瞬时吞吐量
协议层次和服务模型

(因特网)协议栈:各协议栈的所有协议,报文从上到下经过各层时,分别在首部加入各层的信息进行封装.
注: 另有7层OSI参考模型:将应用层分为应用、表示和会话层.

  1. 应用层:是网络应用程序及其应用层协议存留的地方(HTTP, SMTP,FTP)
  2. 运输层:在应用程序端点间传送应用层报文(TCP,UDP),运输层分组称为报文段.
  3. 网络层:负责将网络层分组(数据报),在主机间传递(IP协议),有时简称为IP层.
  4. 链路层:将分组从一个结点(主机或路由器)移动到下一个结点.
  5. 物理层:将帧(链路层分组)中每个比特从一个结点移动到下一个.
网络攻击
  1. 恶意软件的自我复制
  • 病毒:需要用户交互,如包含恶意可执行代码的电子邮件.
  • 蠕虫:无需交互.
  1. 攻击服务器(拒绝服务攻击Dos)
  • 弱点攻击:向目标主机发送报文,使之停止运行或崩溃.
  • 带宽洪泛:向目标主机发送大量分组,使合法分组无法到达服务器.
  • 连接洪泛:在目标主机中创建大量TCP连接,使主机停止接受合法连接.
  1. 嗅探分组:在无线传输设备的附近设置一台被动的接收机,该接收机就能得到每个分组的副本.
  2. IP欺骗:将具有虚假源地址的分组注入因特网.
发展历史

1.从电路交换到分组交换(1961-1972)

  • 第一个因特网:ARPAnet(1967),4个交换机.
  1. 专用网络和网络互联(1972-1980)
  • 创建了网络的网络,期间就已经形成了TCP,UDP,IP协议的概念.
  1. 网络激增(1980-1990)
  • 联网的主机达到10万台.
  • 1983年TCP/IP作为ARPAnet的新标准协议正式部署.
  • DNS(域名系统)出世,用于将可读的因特网名字(www.tukif.com)映射到其32比特的IP地址.
  • 爆炸(1990-):ARPAnet和NSFNET相继退役,因特网商业化,万维网应用(WWW)出现.
  • 最新发展
    • 自2000年起,家庭宽带接入高速化.
    • 高速公共WiFi网络普及,2011年无限联网设备数量超过有线.
    • 社交网络软件兴起.
    • 谷歌、微软部署专用网络,绕过因特网.
    • 云计算兴起.

(二)应用层

应用层协议原理
  1. 网络应用程序体系结构
  • 客户-服务器结构:服务器具有固定、周知的地址(IP地址),且总是打开,如Web应用程序.
  • P2P结构:应用程序在间断连接的主机对之间直接通信.
  1. 进程通信

进程可以认为是运行在端系统中的一个程序.

  • 客户-服务器进程:发起通信的进程被标识为客户,在会话开始时等待联系的进程是服务器.
  • 进程与计算机网络的接口:套接字.
    • 套接字是一个软件接口,进程通过其向网络收发报文.
    • 套接字是应用程序和运输层的接口,也就是之前提到的API,开发者可以控制套接字在应用层端的一切,但对其在运输端几乎没有控制权.
    • 将进程比作房子,套接字就是门.
  1. 进程寻址
  • 主机地址:32比特的IP地址.
  • 目的主机的接收进程(接收套接字)的标识符.
  1. 可供应用程序使用的运输服务
    当开发一个应用时,必须选择一种可用的运输层协议,选择依据为:
  • 可靠性:防止丢包.
  • 吞吐量:数据传输率.
  • 定时:数据交付的时间限制(游戏时延).
  • 安全性:运输过程加/解密数据.
  1. 因特网提供的运输服务
  • TCP服务:包括面向连接和可靠数据传输服务.
    • 面向连接:对话前TCP让客户和服务器握手,交换运输层控制信息,在两进程间建立一个TCP连接,双方进程都可在此连接上进行报文收发,对话结束后必须拆除该连接.
    • 可靠数据传送:数据通过TCP连接在两套接字间流动,没有丢失和冗余.
    • TCP协议还有拥塞控制机制,出现拥塞时,其会抑制发送进程.
    • SSL(安全套接字层):对TCP的加强,多了SSL独有的API,在TCP的API间交流数据的前后对数据进行加解密,提高安全性.
  • UDP服务:无连接,并不保证报文到达接收进程,也有可能乱序到达.
  1. 应用层协议

应用层协议只是网络应用的一部分,有些由RFC文档定义(HTTP)是公开的,有些则是专用的(Skype).

定义了以下信息:

  • 报文类型:请求或响应报文
  • 报文类型的语法:报文中字段及其描述方式
  • 字段的语义:字段中包含的信息的含义
  • 进程发送报文的时间和方式,及响应规则
Web和HTTP
  1. HTTP概述
  • HTTP(超文本传输协议)是Web的应用层协议,是Web的核心.
  • HTTP由客户和服务器两个程序实现,二者运行在不同的端,通过交换报文进行会话.
  • Web 页面(文档)由对象组成,Web页面一般有一个HTML基本文件和几个引用对象.
  • HTML基本文件通过对象的URL地址引用它.
  • URL存放对象的主机名(www.baidu.com)和路径名(/tieba/cat.jpg)
  • Web浏览器(IE9)和Web服务器,分别实现了HTTP的客户端和服务器端,Web对象存放在服务器中.
  • HTTP使用TCP作为其支撑运输协议.
  • HTTP是无状态协议,不保存关于客户的任何信息.
  1. 持续/非持续连接
  • 三次握手(三次握手的目的是在浏览器和服务器建立TCP连接.):客户向服务器发送一个小TCP报文段,服务器用其作出确认和响应,最后客户向服务器返回确认(二者之间发送了三次报文段)
  • 非持续连接:每个TCP连接只传输一个请求和一个响应报文;必须为每个请求的对象建立和维护一个全新的连接(服务器负担大),且每个对象经受两倍的RTT时延(一个短分组在客户和服务器间往返一次的耗时).
  • 持续连接(默认):所有的请求及其响应经相同的TCP连接发送.
  1. HTTP报文格式
  • 请求报文
    请求报文的通用格式是1个请求行+4个首部行+实体体
GET /somedir/page.html HTTP/1.1  #请求行
Host: www.someschool.edu  #对象所在主机
Connection: close  #通信后就关闭此连接
User-agent: Mozilla/5.0  #用户的浏览器信息
Accept-language:fr  #对象的语言版本
  • 响应报文
HTTP/1.1 200 OK  #状态行
Connection: close
Date:Tue,09 Agu 2011 15:44:04 GMT #服务器发送报文的时间
Server: Apache/2.2.3(Centos) #服务器类型
Last-Modified: Tue,09 Agu 2011 15:44:04 GMT #对象最后修改时间
Content-length: 6821  #发送对象的字节数
Content-Type: text/html #对象类型(HTML文本)
(data data data ...)  #实体体(主要部分,包含请求对象)
  • Cookie
    • 当某用户首次访问某网站时,服务器根据请求报文产生一个唯一的识别码,添入响应报文.
    • 浏览器收到响应报文后将识别码添入Cookie 文件,以后每次向该网站发送请求报文时,都会在其中添入该识别码,从而 Cookie 向服务器标识了该用户.
  1. Web缓存(代理服务器)
  • 代理服务器通常由ISP购买并安装,且要预先配置其配套的浏览器指向它们.
  • 浏览器向代理服务器发送请求报文,代理服务器检查本地是否存储了该对象的副本,若有则返回,没有则代理服务器向初始服务器请求该对象,收到响应后,代理服务器先在本地存储副本,再响应浏览器.
  • 缓存器使用GET方法发送请求报文,以保证其对象副本是最新的.
文件传输和FTP
  1. 用户从FTP服务器中获取或存放文件.
  2. FTP协议使用两个并行的TCP连接来传输文件;控制连接用于传输控制信息(用户账户,密码等),数据连接传输实际文件.
电子邮件
  1. 基本过程:用户A想向B发邮件,需打开邮件代理程序并提供B的地址,发送到A的邮件服务器,A的邮件服务器和B的邮件服务器联系,若不能成功连接则多次尝试(服务器可能未开机),连接成功后,将邮件交付B的邮件服务器,放至B的存储空间,等B下次登录时则可见.
  2. SMTP:SMTP是电子邮件主要的应用层协议,在两个邮件服务器间运行,把文件从发送服务器推向接收服务器.
  3. 邮件访问协议:用户代理程序不能使用SMTP取回邮件,必须使用某个邮件访问协议.
  • POP3
  • IMAP:IMAP让用户创建远程文件夹,并为邮件指派文件夹.
  • 基于Web的电子邮件:用户代理程序就是浏览器,用户与服务器的通信使用HTTP,但邮件服务器之间的通信仍使用SMTP.
DNS(域名系统)
  1. DNS是提供将主机名转换到IP地址的目录服务的应用层协议,运行在UDP之上,由一个分布式数据库服务器实现.
  2. DNS分布式服务器
  • 根服务器
  • TLD服务器(顶级域):com, org, edu
  • 权威服务器:amazon.com, baidu.com
  • 外部还有本地服务器,如用户想查询tieba.baidu.com,需先将请求报文发送到本地DNS服务器,本地服务器请求某个根DNS服务器,根服务器返回com TLD服务器地址,本地服务器再请求baidu.com权威服务器,其找到tieba.baidu.com的IP地址,返回本地服务器,本地服务器将其返回用户.
    3.DNS缓存:在一个IP地址请求链中,某个DNS服务器收到地址回答后,将其存到自身的本地存储器,以便下次直接回答;缓存通常两天一清.
P2P应用
  1. BitTorrent是一种流行的用于文件分发的P2P协议.
  2. DHT(分布式散列表)是分布在大型对等方社区中的数据库.
TCP套接字编程

对于专用的网络应用程序,其应用层协议未发布在某个RFC中,为此需编写套接字,首先需决定程序是运行在TCP还是UDP上.

  1. UDPClient.py (代码采用Python 2.7编写)
from socket import *  #导入套接字模块
serverName = '128.138.32.126' # 服务器主机地址或主机名
serverPort = 12000 #端口号
clientSocket = socket(AF_INET,SOCK_DRAM) 
#创建用户套接字
#AF_INET指示底层网络使用IPv4地址簇,SOCK_DRAM表示这是一个UDP套接字
message = raw_input('shuru xiaoxie juzi:')
clientSocket.sendto(message,(serverName,serverPort))
#为报文附上目的地址,并发送给套接字
modifiedMessage, serverAddress = clientSocket.recvfrom(2048) 
#接收响应报文,serverAddress 存放其源地址(实际并不需要)
print modifiedMessage
clientSocket.close()
  1. UDPServer.py
from socket import * 
serverPort = 12000 
serverSocket = socket(AF_INET,SOCK_DRAM) 
serverSocket.bind(('',serverPort)) #将端口号与服务器套接字绑定
print "Fuwuqi zhunBei Haole"
while True:  #无限循环
    message,clientAddress = serverSocket.recvfrom(2048) # 接受报文与对应地址
    modifiedMessage = message.upper()
    serverSocket.sendto(modifiedMessage,clientAddress)  #返回客户
  1. TCPClent.py
from socket import * 
serverName = '128.138.32.126'
serverPort = 12000
clientSocket = socket(AF_INET,SOCK_STREAM)
#SOCK_STREAM表示这是一个TCP套接字
clientSocket.connect((serverName,serverPort))  #建立TCP连接
message = raw_input('shuru xiaoxie juzi:')
clientSocket.send(sentence)
modifiedSentence = clientSocket.recv(1024)
print 'cong fuWuQi: ', modifiedSentence 
clientSocket.close()
  1. TCPServer.py
from socket import * 
serverPort = 12000 
serverSocket = socket(AF_INET,SOCK_STREAM) 
serverSocket.bind(('',serverPort)) #欢迎套接字,等待敲门
serverSocket.listen(1)  #服务器聆听客户的TCP连接请求
print "Fuwuqi zhunBei Haole"
while 1: 
    connectionSocket,addr = serverSocket.accept() 
    #用户敲门后,在服务器中创建了一个此用户的专用套接字
    sentence = connectionSocket.recv(1024)
    capitalizedSentence = sentence.upper()
    connectionSocket.send(capitalizedSentence)
    connectionSocket.close()

(三)运输层

概述
  1. 运输层协议为不同主机上的应用进程提供逻辑通信,因此进程可以依此相互收发报文(网络层提供的是主机间的逻辑通信).
  2. 运输层协议在端系统中实现,主要有TCP和UDP.
  3. 将主机间的交付扩展到进程间的交付称为多路复用和多路分解,是UDP和TCP的最基本的任务,此外还提供差错检测服务.
多路复用与多路分解
  1. 多路复用包括在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息,从而生成报文段,再将其传到网络层.
  2. 多路分解是指将运输层报文段中的数据交付到正确的套接字.
  3. IP地址指向主机,端口号指向套接字.
  4. 主机上的每个套接字能够分配一个端口号,当报文段到达主机时,运输层检查报文段中的目的端口号,并将其定向到相应的套接字,然后报文段中的数据通过套接字进入其所连接的进程.
  5. 如果两个UDP报文段的目的IP地址和端口号相同,而源IP地址或端口号不同,则二者进入相同的目的套接字;而对于两个TCP报文段,源IP地址或端口号不同,则会被定向到两个不同的套接字.
无连接传输:UDP
  1. UDP报文段包括报文和首部,首部有4个字段,每个字段有2个字节. 字段有:源端口号,目的端口号,长度,检验和.
  2. UDP只能提供差错检测(检验和),但不能恢复.
可靠数据传输原理
  1. 包括差错检测(检验和),接收方反馈(ACK,NAK),重传,分组序号,定时器(停等)等技术.
  2. 若不使用停等方式运行,允许发送方发送多个分组而无需等待确认,称为流水线技术,解决其差错恢复的方法有回退N步(GBN)和选择重传(SR).
面向连接的运输:TCP
  1. 客户和服务器经三次握手后建立TCP连接;数据在套接字间传递时会被TCP放入发送和接收缓存中;TCP从缓存中取数据的数量受限于MSS(最大报文段长度).
  2. TCP报文段结构:首部字段(20字节)= 源、目的端口号(各16比特)+ 检验和(16比特)+ 序号和确认号(各32比特)+接收窗口(16比特)+首部长度(4比特)+选项(变长)+标志字段(6比特,ACK,RST,SYN,FIN,PSH,URG)+紧急数据指针(16比特)以及数据字段(1字节)
  3. TCP采用超时/重传机制来处理报文段的丢失问题.
  4. TCP的可靠数据传输服务确保一个进程从其接收缓存中读出的数据流是无损、无间隔、非冗余和按序的.
  5. TCP为其应用程序提供流量控制服务,即通过速率匹配以消除发送方使接受方缓存溢出的可能性(不同于拥塞控制机制)
  6. TCP连接管理(三次握手)

客户和服务器都能终止TCP连接.比如客户向终止连接,则向服务器进程发送一个报文段. FIN比特=1. 服务器收到后,返回确认,之后发送自己的一份终止报文段,FIN=1. 最后客户对其确认,此时两台主机用于该连接的所有资源都被释放了.

  • Step 1: 客户TCP向服务器TCP发送SYN报文段(封装进IP数据报),SYN比特=1,随机选择的客户序号clientIsn.
  • Step 2: 一旦到达服务器,服务器提取TCP SYN报文段,为该TCP分配缓存和变量,并向该客户发送允许连接的SYN ACK报文段,包含SYN比特=1,确认号 = clientIsn + 1,服务器初始序号 serverIsn.
  • Step 3: 一旦到达客户,客户也要给该连接分配缓存和变量,同时客户向服务器发送另一个报文段,确认号 = clientIsn +1,SYN比特=0,用于对服务器允许连接的报文段进行确认;这一报文段可以携带想要传输的数据.
  1. SYN洪泛攻击:攻击者发送大量的TCP SYN报文段而不完成三次握手,使服务器的连接资源被耗尽;使用SYN cookie防御.
  2. TCP使用端到端的拥塞机制.

(四)网络层

网络层功能和服务
  1. 网络层的作用是将分组在主机间传输,需要以下两种网络层功能:
  • 转发:选择路由器中的哪条链路(由路由选择算法决定插入路由器中转发表的值.)
  • 路由选择:选择哪条路由器.
  1. 因特网的网络层服务模型是单一的尽力而为服务,此外还有ATM CBR和ATM ABR等模型.
  2. 计算机网络按提供服务类型分为虚电路网络(连接服务)和数据报网络(无连接),因特网是数据报网络.
网际协议:因特网中的转发与转址
  1. 因特网的网络层组件:IP协议,路由选择部分,ICMP(控制报文协议)
  2. IPv4是第4版IP协议,IP地址长度为32比特,允许数据报分片,以解决链路层帧的MTU(最大传送单元)的限制.
  3. IPv4编址
  • 每台主机和路由器接口都有自己的IP地址,全球唯一(除NAT接口),不能任意选择.
  • 三台主机223.1.1.1,223.1.1.2,223.1.1.3与路由器接口223.1.1.4的前24比特相同,四者形成一个子网,IP编址为其分配一个地址223.1.1.0/24,其中/24称为子网掩码.
  • 因特网的地址分配策略称为CIDR(无类别域间路由选择)
    如一个ISP有两个子网,200.23.16.0/23,200.23.18.0/23,外界只需要向此ISP发送前20比特与200.23.16.0/20相同的数据报(地址聚合原则)
    注:CIDR之前的策略是分类编址(A,B,C类)
  • 目的地址是255.255.255.255(IP广播地址)的报文将会交付到同一个网络中的所有主机.
  • 子网的地址块获取方法
    • 从其ISP已获取的较大的地址块获取
    • 直接从ICANN请求
  • 主机地址分配:DHCP(动态主机配置协议)
    网络管理员可以配置DHCP,可以选择某台主机每次联网时得到的是固定的IP还是临时分配的IP(每次联网可能不同)
  • NAT(网络地址转换)
    • NAT路由器对外界的行为如同一个具有单一IP地址的单一设备;所有离开家庭路由器流向更大网络的报文和所有进入家庭网络的报文都拥有同一个源或目的IP地址.
    • NAT使能路由器对外界隐藏了家庭网络的细节.
    • 当分组进入路由器时,路由器上的NAT转换表(包含端口号和IP地址)决定分组转发给哪个内部主机.
  1. ICMP(控制报文协议)用于差错报告和控制拥塞(源抑制报文)
  2. 防火墙和IDS(入侵检测系统)
  • 防火墙检查报文的首部字段,拒绝可疑的数据报进入内部网络(大多数路由器即可实现)
  • 当分组通过IDS时,分组的首部字段和有效载荷与其攻击特征数据库进行匹配;如果匹配成功则报警.
  1. IPv6
  • IPv6将IP地址长度从32扩到128比特.
  • IPv6不允许在中间路由器上进行报文分片与重新组装.
  • IPv6删除了首部检验和功能.
  • 使用双栈方法引入IPv6结点,即使用该方法的IPv6结点还具有完整的IPv4实现.
  1. IPsec(安全性网络层协议):通信时两台主机建立一个IPsec会话,发送端的运输层向IPsec传递一个报文段,经IPsec加密,并添入安全性字段, 发送到目的主机,IPsec解密后传给运输层.
路由选择算法

(五)链路层

概述
  1. 主机的链路层主体是在网卡(网络适配器,NIC)中实现,网卡的核心是链路层控制器,其是一个专用芯片(即链路层控制器的许多功能是用硬件实现的);网卡现大多被综合进主板.
  2. 部分链路层是在运行于主机CPU中的软件实现,因此链路层是硬件和软件的结合体.
  3. 帧就是封装了链路层信息的数据报.
差错检测和纠错技术
多路访问链路和协议
交换局域网
  1. 链路层寻址和ARP(地址解析协议)
  • Mac地址(链路层地址):
    • 主机和路由器的适配器(网络接口)具有Mac地址(主机和路由器的连接口并没有),长度为6字节(16进制表示);
    • 没有两块适配器的MAC地址相同(IEEE管理MAC地址空间),但现在有可能用软件改变MAC地址(一般假定不变);
    • 链路层采用MAC寻址.
    • 网口除网络层地址外,还需要MAC地址,是因为局域网是为任意网络层协议设计的,而不只用于IP和因特网;另外如果适配器采用网络层地址而非MAC地址,网络层地址必须存储在适配器的RAM中,且每次适配器移动或加电时要重新配置.}
  • 当适配器A要向适配器B发送一个帧,A将B的MAC地址插入到该帧,并将该帧发送到局域网.
  • ARP为同一个子网上的主机和路由器网口提供IP地址与MAC地址的转换(ARP表)
  • 主机A想要发送报文到子网外的主机B,首先使用ARP将数据报发送到子网A的网口,路由器A使用转发表将其发送到路由器B,对报文再次封装成帧,再由ARP转到主机B.
  1. 以太网:最流行的有线局域网技术
  2. 链路层交换机:任务是接入链路层帧并将其转发到出链路.
  3. VLAN(虚拟局域网):只使用物理局域网交换机,通过对其接口划分组,定义多个虚拟局域子网.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容