
강의 : http://www.kocw.net/home/cview.do?mty=p&kemId=1169634
TCP 와 UDP : 데이터를 전송하는 두 가지 방법
TCP : 신뢰성 있게 데이터 전송UDP : 아몰랑 그냥 보내버려 근데 빨라 packet
packet 기반의 데이터를 보낸다.packet 이라는 집합으로 해서 보낸다.packet은 데이터의 bit 의 집합packet delay
라우터 에서 packet 을 알맞게 보내주기 때문에 라우터 를 공유하는 여러 사용자들이 보낼 수 있다.processing delay : 데이터 확인 및 아웃고잉 링크 확인queueing delay + packet loss : 데이터를 전송 전 대기하는 딜레이 (보내는 양보다 받는 양이 많을 경우 딜레이 발생, 큐 보다 많은 양이 많이 들어오면 데이터 소실)transmission delay : packet 을 link 를 통해서 온전히 보낼 때 생기는 딜레이propagation delay : 다음 router 까지 보내는동안 걸리는 딜레이 
10개의 차들이 10개가 연결된 채로 쭉쭉 가야 한다고 가정했을 때
10개의 차가 모인 caravan 은 packet , 차들은 bit 라고 볼 수 있다.
첫 번째 톨 게이트를 들리면 차들은 톨게이트의 큐 안에 대기하고 10개의 차가 모두 모여 packet 형태가 되면 출발한다.
그러니 두 번째 톨게이트로 도착하는데 걸리는 시간은 1 시간 + 큐잉 딜레이 (120초) = 1시간2분

네트워크 계층은 애플리케이션 레이어 -> 트랜스포트 레이어 -> 네트워크 -> 데이터 링크 -> 피지컬 레이어로 이뤄져있다.
네트워크 계층은 계층 별로 프로토콜 이 존재하며 강의에선 굵직 굵직하게 볼 것이라고 한다.
예를 들어
HTTPTCP / UDPIPWifi , LTE .. etc 지피티한테 물어보자 ..
OSI 모델 (Open systems Interconnection)
물리 계층 (Physical Layer) : 프레임(Frame) 단위의 데이터 전송을 담당하고, 물리 주소(MAC 주소)를 사용하여 특정 장치를 식별합니다.
이더넷과 같은 스위치, 브리지, 네트워크 카드 등이 여기에 속합니다.네트워크 계층 (Network Layer): 패킷(Packet)을 이용하여 목적지까지의 경로를 선택하고 라우팅을 수행합니다. 라우터가 이 계층에서 동작하며, IP 주소를 사용하여 목적지를 식별합니다.
전송 계층 (Transport Layer): 데이터의 신뢰성을 보장하고, 흐름 제어 및 오류 복구를 담당합니다. 주로 TCP(Transmission Control Protocol) 또는 UDP(User Datagram Protocol)가 이 계층에서 동작합니다.
세션 계층 (Session Layer): 양 끝단 간의 대화와 데이터 교환을 관리합니다.
세션 설정, 유지, 종료 등의 작업을 수행합니다.표현 계층 (Presentation Layer): 데이터의 표현 형식을 정의하고, 서로 다른 데이터 형식 간의 변환을 수행합니다. 암호화, 압축, 문자 인코딩 등이 여기에 속합니다.
응용 계층 (Application Layer): 최종 사용자가 네트워크에 접근할 수 있도록 서비스를 제공합니다. 프로토콜 스택의 최상위 계층으로, HTTP, SMTP, FTP 등 다양한 응용 프로그램이 이 계층에서 동작합니다.
네트워크 계층은 하위 계층의 기능이 상위 계층에게 기능을 제공한다.

애플리케이션들이 존재 할 때 compile 하는 순간 process 가 진행된다.
웹 브라우저의 경우 네트워크의 기능이 있는 process 라고 볼 수 있다.

웹 브라우저와 서버의 연결은
네트워크 기능이 있는 웹 프로세스와 네트워크 기능이 있는 서버의 프로세스 간 라우터로 중계되는 것이다.
현재 강의는 애플리케이션부터 탑 다운 방식으로 내려간다.
그러니 강의를 듣다가 깊은 내용이 나오더라도 그냥 그렇다 하고 받아들이자

서버
> IP 주소가 고정되어 있어야 클라이언트들이 항상 잘 찾아올거 아니야 ~ 클라이언트IPC (Inter process Comunication)
운영 체제에서 실행 중인 여러 프로세스 간에 데이터를 교환하고, 상호작용 하는 메커니즘
네트워크 기능을 갖는 프로세스들간의 통신을 가능하게 하는 것을소켓(Socket)이라고 한다.
그러니까소켓은 프로세스 간 통신을 위한인터페이스

다른 컴퓨터와 연결하기 위해선 다른 컴퓨터의 소켓 의 주소를 알아야 한다.
이 때 소켓 의 주소는 IP address + port number 이다.
IP address : 컴퓨터 상의 위치 port number : 운영중인 프로레스의 숫자 그니까 한 노트북에 여러 프로세스가 돌아가고 있을 텐데 웹 브라우저
소켓의 주소는
현재 컴퓨터 상의 위치 + 프로세스의 숫자로 만들어진다.

웹 브라우저 자체는 일반적으로 하나의 프로세스로 동작하기 때문에 같은 주소를 다른 애플리케이션으로 연다고 할 지언정, 해당 주소의 웹 브라우저의 포트번호는 같기 때문에 어떤 애플리케이션이냐는 영향을 미치지 않는다.
따라서 같은 도메인 주소를 사용하는 경우에는 일반적으로 브라우저에서 사용되는 포트번호가 같으며, 소켓 주소도 같다 .
www.naver.com 이라고 해서 들어가는 것은 사실 nvaer 의 ip 주소 + 포트 번호 (HTTP 인 경우엔 80 , HTTPS 인 경우엔 443) 과 같다.
www.naver.com 은 네이버의 IP 주소의 DNS(Domain name system) 이다.
대부분 웹브라우저들이 80번 포트를 사용하고 있다. 왜 공통된 포트 주소를 쓸까 ?
서버는 24시간 켜져있어야 하며 주소가 일정해야 한다. (IP 주소 뿐이 아니라 포트 숫자까지)
DNS는 단순히문자열을IP address로 변경해줄 뿐이지 포트 주소는 알려주지 않는다.
그러니 대부분 웹 브라우저들이 포트를 공통되게 사용한다. 안그러면 DNS 에서 포트 주소까지 만들어야 하니까 !

...
등등 많은 요구 사항이 있는데 그 중 현재의 애플리케이션 네트워크가 보장하는 것은
data integrity(데이터 무결성) 이다.
data integrity 는 TCP 를 이용하여 보장한다.

이 중에서 가장 유명한 애플리케이션은 web 을 전송 시키는 HTTP 에 대해서 공부해보자

Hyper Text : Text 인데 중간 중간에 링크가 존재하는 텍스트
클라이언트가 서버에 접속하려고 할 때
클라이언트는 HTTP request 를 서버에 보내고 서버는 클라이언트에게 HTTP response 를 보낸다.

request , response 가 있기 전에 일반적으로 transpose 하는 것이기 때문에
transpose layer 의 기능을 사용 할 것이고 그 중 일반적으로 TCP 를 사용 할 것이다.
서버와 클라이언트가 서로 요청을 보내고 받기 위해서는 TCP connection 이 우선적으로 일어나야 한다.
HTTP is stateless : HTTP 는 정말 단순해서 request 에 대한 response 만 보낼 뿐 기억하거나 그러지 않는다. 상대방에 대한 상태를 기억하지 않는다.
정리 : HTTP 는
TCP connection을 사용해서requset,response를 통해 소통한다.

request , response 를 받기 위해선 TCP connection 을 먼저 진행해야 한다고 했다.
이 때 TCP connection 을 한 후에 연결을 끊으면 non persistent , 연결을 끊으면 persistent
예를 들어 네이버 메인페이지 안에는 다양한 그림 파일이나 다른 하이퍼링크들이 있을 것이다.
우리가 네이버에 접속 할 때 클라이언트와 네이버의 서버는TCP connection을 연결 한 후에 메인 페이지를 가져올 것이다.
이 때Non persistent는 메인 페이지를 가져온 다음에TCP connection해제 , 다시 연결 후 다른 그림 파일에 대한 HTTP 가져오고 , 끊고 다시 연결하고 .. 반복
Persistent는TCP connection을 유지한 채로 다른HTTP protocol을 수행한다.