05 트렌스포트 계층
intro
통신을 실현하는것
트렌스포트: 수송하다, 운반하다
데이터를 상대에게 전달하는 것
상대 어플리케이션 계층에 있는 어떤 프로토콜에 전달할지 책임
포트:
어플리케이션 계층의 서비스 수만큼 존재하는 프로토콜중, 목적 프로토콜을 지정하기위한 장치
어플리케이션 계층에 설치된 출입구. 각각을 개별 프로토콜로 가는 현관문이라고 생각하면 좋음.
각 포트에는 포트번호라는 고유 숫자가 할당되어있음.
프로토콜을 식별
다른 통신 서비스를 동시에 사용할수있다.
트렌스포트 계층의 역할
트렌스포트 계층은 에플리케이션계층과 네트워크 계층의 중개역할
데이터를 전달하면서 문제가 발생한 경우 대처방안이 필요한데, 이 때 통신 서비스에 맞는 방법으로 처리하는 역할을 맡는다.
신뢰성이냐, 속도냐에 따라 TCP/UDP라는 두개의 프로토콜로 나뉨.
TCP: 신용 우선. (송신 데이터를 확실히 상대에게 전달하고 싶을때. WWW, 전자메일)
UDP: 속도 우선. (송신하는 패킷이 작거나, 데이터 재전송 필요 없을때. 스트리밍, IP전화)
애플리케이션의 현관
application protocol마다 데이터의 출입구가 있고, 이 출입구를 '포트(port)'라고함
각 포트마다 '포트번호'가 있음.
통신을 수행할 때, 포트 번호를 사용해 보낼 곳 지정.
포트 번호는 0~65535번까지 있고, 0~1023번까지 미리 예약된(웰노운)번호라고함
WWW서비스를 하는 application protocol은 HTTP, 포트번호는 80, 트렌스 포트 계층 프로토콜은 TCP/IP 이런식으로 예약되어있음.
그 외의 포트 번호는 사용자가 임의로 설정 가능 (단, 어떤 포트번호 사용할지는 인식 통일)
TCP프로토콜
데이터 전달의 신뢰성을 중시한 프로토콜
데이터를 확실히 전달하기 위해 수신측과 1:1 통신 (커넥션형 통신)
통신연결: 수신측이 데이터 받을 수 있는지 상태 확인후 통신 개시.
데이터를 정해진 크기로 분할하여, TCP헤더를 붙여 순서대로 송신.
여기서 취급하는 데이터 단위를 세그먼트라고함
데이터 다 보내면 통신 종료
수신측과 연락을 긴밀히 취함으로써, 데이터 송신의 확실성 높임
수신측은 전해받은 데이터를 원래 형태로 맞추어 에플리케이션 계층에 전달.
TCP헤더의 정보에 따라 순서대로 맞추기.
포트번호, 데이터 무사한지 확인하는 값등이 적혀있음
어플리케이션 계층의 프로토콜에 전달.(포트번호 보고 판단)
확실히 전달하기 위해
연락방법
통신상대에게 통신상태를 전하는 수단으로 TCP 헤더에 있는 6bit 컨트롤 플래그를 사용한다. 상대에게 전하고 싶은 항목을 '1'로 만들고 나머지는 '0'으로 둔다.
컨트롤플래그(각 비트별 의미)
URG(Urgent)
ACK(Acknowledgement)
PSH(PUSH)
RST(Reset)
SYN(Synchronize)
FIN(Fin)
상대와 서로 확인해가면서 주고받는것을 '핸드셰이크'라고 함.
TCP에서 통신 개시할 때, 3-way 핸드셰이크라고함.
통신 시작전에 양쪽 모두 다룰 수 있는 데이터 양을 먼저 확인함.
세그먼트사이즈: TCP 헤더를 붙인 패킷사이즈
윈도우 사이즈 : 한번에 받을 수 있는 양
두 수치가 작은쪽으로 맞춘다.
통신 해제할 때, TCP 헤더의 컨트롤 플래그를 사용해 연락을 취한다.
주고받기 흐름
TCP헤더에는 데이터 순서를 나타내는 번호(시퀀스 번호) 가 적혀있음.
헤더를 확실히 받기 위해 이 번호를 사용하여 주고받기 수행.
송신측: TCP헤더에 시퀀스 번호쓰고, 세그먼트 보냄
수신측: 시퀀스 번호를 보고 순서대로 전달되었는지 확인후, 전달받은 세그먼트의 다음 번호를 송신측에 알려줌.
송신측: 무사히 전달되었다는 걸 확인후, 다음 세그먼트 보냄
수신측: 다음 세그만트 받고, 시퀀스 번호보고 순서대로 나열.
세그먼트가 없어질때까지 반복
모아서 보내기
세그먼트를 하나씩 보내는것보다 여러개 보는게 효율적임
통신 시작시, 윈도우 사이즈만큼씩 확인응답을 기다리지 않고, 모아 보낼 수 있음
윈도우 사이즈는 통신 도중에 변경될 수 있다. 따라서, 상황에 맞게 사이즈 조절하여 통신 가능.
문제 발생 시 처리
TCP에는 '송수신 중 문제 발생시 세그먼트 재전송한다' 라는 약속이 있음
일정 시간이 기다려도 확인 응답이 없을 경우 이유 불문하고, 송신측은 세그먼트를 재전송한다.
세그먼트의 지연 및 분실
확인 응답의 지연 및 분실(세그먼트가 중복되면 하나를 남기고 파기)
데이터의 파손(송신 도중 데이터 깨져있으면 수신측에서는 해당 데이터를 파기하고, 확인응답을 보내지 않음. 깨진것 유무는 checksum 값을 통해 판단)
일정 횟수 이상 재전송 해도 확인응답이 없을경우, 송신측이 강제로 통신을 해제함. RST플래그를 1로 만들어서 종료.
수신측 처리
TCP 헤더에 적힌 포트번호를 보고 지정된 어플리케이션 프로토콜에 데이터 전달.
데이터가 하나의 세그먼트로 묶여있으면 헤더를 제거하고 전달
두개 이상 분할되어있으면 시퀀스 번호를 보고 세그먼트를 조립한 후 전달.
조립한 데이터를 지정된 에플리케이션 프로토콜에 전달하면 TCP의 일은 끝
UDP프로토콜
통신 속도를 중시한 프로토콜
UDP에서는 사전 의논을 하지 않고 일방적으로 데이터를 보냄(비커넥션형 통신)
수신측이 받을 수 있는 상태를 조사하지 않고 보냄, 무슨일이 생기더라도 재전송 하지 않음.
수신측은 받아도 확인 응답을 보내지 않음. 데이터 깨져있으면 파기
동시에 데이터 보낼 수 있음.
멀티캐스트: 복수의 특정인에게 보냄
브로드 캐스트: 불특정 다수에게 보냄
UDP가 하는일
데이터가 깨졌는지 확인하고, 깨졌다면 파기
UDP헤더를 제거하고 지정된 애플리케이션 프로토콜에게 전달.
확실성보다 실시간성이 중요시되는 통신이나, 데이터가 작은 네트워크 관리 통신, 스트리밍등에 사용됨.
netstat명령(cmd에서 실습)
netstat만 쓰면 UDP는 보이지 않음 옵션으로 -a를 사용하면 보임
netstat
Last updated