* Transport Service와 Protocols
- 양 종단의 호스트 사이에서 응용 메세지의 전달을 담당
- 양 종단에서만 실행되므로, 거쳐가는 노드는 알 필요 없다.
- Transport Layer에는 어떤 Application의 어떤 Process에 연결하는지에 대한 정보가 있어야 한다.
(Message의 소속을 구별해준다.)
* Port Number
- Message가 어느 Process에 해당하는지 알려주는 것으로 Application process Address이다.
- Port Number의 영역은 다음과 같이 나눠져 있다.
※ IP주소로 어떤 컴퓨터(Host)로 전달할지를 판별하고 Port Number를 이용해 실행 프로그램을 알아낸다.
* Transport Layer(TL) protocols
-TL이 많은 것이 좋은가? 적은 것이 좋은가?
ⓐ TL이 어플리케이션 마다 하나 씩 존재한다면...(많다면)
> Application 요구에 맞춰서 대응이 가능하다.
> 복잡해지고, TL계층의 존재의미가 사라진다.
ⓑ 하나만 있다면...(적다면)
> 전달 받았을때 각 Application마다 하지 않아도 되는 일을 할 수도 있다.
> 효율성이 낮아진다.
※ 하지 않아도 되는 일 : error 검사
- Internet 5Layer의 TL에서는 2개를 제공해준다.
ⓐ TCP : 응용 프로세스가 신뢰할 수 있는 서비스를 제공(에러 검사)
ⓑ UDP : TL에서 할 일만 하는 것(단순히 process에 message만 전달)
> Application 마다 TCP와 UDP 요구하는 것이 각각 다르다.
* UDP
- 정보 단위(segment)를 단순히 전달해 주는 역할을 한다.
- 신뢰도가 필요없는 프로세스에서 사용한다.
- Header : Application port번호만 존재하면 된다.
* TCP
- 신뢰성 있는 Mesage 전달
- 신뢰성이란?
> error제어 : 전자기 신호, 체증 때문에 segment가 변경되었는지 여부를 체크
> 흐름제어
> 순서보장 : Packet이 순서대로 잘 들어오는가
> 체정제어(congestion control)
- Header : 신뢰성을 위한 여러가지가 필요하다.
※ Padding : 옵션의 빈공간(32bit를 맞추는데)을 체우기 위한 값
※ Option > maximum segment size : 각각의 세그먼티 최대 길이를 알려줌
- TCP header flag : push(받은 직시 처리), reset(초기화) , urgent(긴급), 이외는 이미 설명
* 스트림 전달방식(TCP의 전달 데이터 전달 방식)
- Buffer를 이용해 packet을 전달한다. Host에선 buffer의 pack순서를 검사하여 오류를 검사하며,
packet전송이 끝나면 프로세스로 메세지로 전달을 한다.
* TCP연결/해제 과정
ⓐ 연결과정
- Sever와 연결이 되있는지 확인을 한다. 3번의 통신이 있어야 연결여부를 확인 할 수 있다.(3-way handshake)
> TCP header의 Red box인 U,A,P,R,S,F중 A,S flag를 사용한다.
> sequence number와 acknowledge number가 필요하다
> sequence number : process의 어디부터 어디까지인지 확인. process의 시작위치를 나타냄
> acknowledge number : 메세지를 받았다는 것을 나타내며, 그 다음 주소를 보내달라고 요청하는 값.
ⓑ 해제과정
- Sever와 연결이 되있는지 확인후, sever가 sequence number를 종료에 맞춰서 준다. 4번의 통신과정이 필요.
> TCP header의 Red box중 A,F flag를 사용한다.
> 연결과 동일하게 sequence number와 acknowledge number가 필요하다.
* TCP의 에러제어
- Ack number를 이용해 현재 어디까지 전송을 받았는지 check를 한다.
- 에러 검출
> CRC(Link Layer) : 노드를 이동할때마다 이전과 현재의 에러검출 코드를 검사한다.(헤더 level에서 검출)
> Checksum : 에러를 많이 검출하지 못하나 속도가 빠르다. software로 간단히 구현이 가능하다.
- 에러 정정
> Forward error connection : 에러 메세지를 보냄
(불필요 한것이 많이 있기 때문에(오버해드 증가) 사용하지 않는다.)
> 재전송 요청
- 재전송 요청에는 두가지 방법이 있다.
ⓐ Go-Back-N ARQ
> 타임아웃 및 보낸쪽의 메세지로 판별후 Sender는 Ack번호가 종료번호와 다르다면 Ack번호부터 다시 보낸다.
(error가 생긴 곳부터 segment를 다시 보낸다)
> Sender가 보내는 Ack번호에 해당하는 것만 다시 보낸다.
- TCP의 에러제어 : Select Repeat ARQ와 유사
> 보내는 사람은 받는 사람이 보낸 Ack number가 무엇인지 확인을 한 후 빈 부분을 보낸다.