TCP
TCP(Transmission Control Protocol)
-3Way-Heandshake 과정을 거쳐 세션을 성립하고 패킷을 전송하는 “연결” 지향형 프로토콜이다.
-패킷전송중 발생하는 손실과 중복 오류를 검출하고 해결하는 기능을 가지고 있다.
-전송계층에 정의되어있다. 응용계층과 네트워크 계층의 동작사이의 매개체로 사용이 된다.
-프로세스간의 통신을 위해서 별도의 주소 포트(Port)를 가진다.
-웹(HTTP)과 같은 신뢰성을 요구하는 통신에 사용된다.
-세션을 가지고 통신을 한다.
TCP 3Way-Heandshake 과정
1. 클라이언트는 서버에 접속을 요청하는 SYN패킷을 보낸다. 이때 클라이언트는 SYN/ACK 응답을 기달리는 SYS_SENT 상태가 된다.
2. 이때 서버는 Listen 상태로 포트 서비스가 가능한 상태이다.(Closed:닫힌상태) 서버는 SYN요청을 받고 클라언트에게 요청을 수락하는 ACK와 SYN flag가 설정한 패킷을 발송하고 클라이언트는 다시 ACK로 응답을 기다린다. 이때 서버는 SYN_RECEIVED상태가 된다.
3. 클라이언트는 서버에게 ACK를 보내고 이후부터 연결이 이루어지고 데이터가 오고가게 된다. 이떄 서버의 상태는 ESTABLISHD이다.
TCP 헤더
TCP 헤더의 최소크기는 20 바이트이며 최대 40 바이트이다.
# 필드
Source Port : 패킷을 송신하는 출발지의 포트번호
Destination Port : 패킷을 수신할 도착지의 포트번호
Sequence Number : 세그먼트(패킷)의 순서 표기
Acknowledgment Number : 수신한 데이터에 대한 응답으로 SEQ+1값을 전송
Data Offset : TCP헤더와 데이터를 포함한 전체 길이
Reserved: 미래를 위해 예약된 필드 - 항상 0
Window Size : 도착지에서 한번에 수신 가능한 버퍼의 크기
Checksum : 데이터가 전송 중 손상되지 않는지 검사
Urgent Pointer : Urgent데이터의 마지막 비트(Urgent Flag가 1로 설정시 동작)
Options and Padding : 최대 40바이트, TCP 헤더 외에 추가적인 정보를 송신할때 사용
# Flags
CWR : 송신자가 자신의 sindow size를 줄임
ECE : 혼잡 감지 시 ECE 플래그 설정후 송신자에게 알림
URG : Urgent pointer 사용
ACK : SYN에 대한 확인
PSH : 수신측은 버퍼의 데이터를 즉시 응용계층에 전송
RST : 강제 세션 종료
SYN : 세션 시작
FIN : 세션 종료
UDP
UDP는 “비연결”지향형 프로토콜로서 단순 오류 검출 기능만을 가지고 있다.
따라서 TCP보다 패킷의 구조가 단순하고 오버헤드가 적다
DNS와 같은 소량의 데이터 전송 시 이용한다.
UDP 헤더
Source Port : 패킷을 송신하는 출발지의 포트번호
Destination Port : 패킷을 수신할 도착지의 포트번호
Total Length : UDP헤더와 데이터를 포함한 전체 길이
Checksum : 데이터가 전송중 손상되지 않았는지 검사
포트가 닫힌경우 ICMP unreachable 응답을 받는다.
TCP와 UDP 보안상의 차이점
인증 권한 > ID,PW>유지>Session / UDP Session X Pass Phrase(SNMP)
검증 : UDP=> Spoofing(DNS spoofing, DHC Pspoofing)
암호화: KEY=> 대칭키(네트워크)/ 비대칭키(사용자 인증, 키동기화) => Session Key / UDP Session X
-상태확인: Stateful(4계층이상) VS Stateless(2,3계층)
1. TCP
- 높은 신뢰성
- 가상 회선 연결 방식
- 연결의 설정과 해제
- 데이터 체크섬 (데이터 재전송 여부 판단)
- 시간 초과와 재전송
- 데이터 흐름 제어
2. UDP
- 비연결 지향형
- 네트워크 부하 감소
- 비신뢰성
- 전송된 데이터의 일부가 손실
3. 차이점
기본적으로 TCP의 신뢰성을 보장하는 여러 패킷들로 인하여 DOS 공격 예상 가능, 연결 과정 중 중간자 공격 등 다양한 시나리오 존재하나 반면, UDP는 데이터 자원으로 인한 공격은 원천적 불가능 (데이터 손실 시 복구 불가능한 단점 존재)
#세그먼트
IP는 패킷의 형태로 데이터를 전달한다. 전송계층에서 TCP는 일련의 바이트를 세그먼트라고 하는 패킷으로 그룹화 하낟.
TCP는 전송을 위해 각 세그먼트에 헤더를 붙이고 IP계층에 세그먼트를 IP데이터 그램으로 캡슐화되어 전송이 된다.
네트워크 계층에서 IP는 서버와 클라이언트간의 데이터 전송을 담당하한다. 이때 데이터링크 계층에서 올바른 응용프로그램으로 포트를 지정하는 역활을 한다.